javascript - 将 SammyJs 与 RequireJs 结合使用

标签 javascript coffeescript requirejs amd sammy.js

我有点麻烦让 sammyjs 与 requirejs 一起玩。调用 $.sammy 失败,错误提示 sammy 未在 jQuery 命名空间中定义。

这是我的需求配置

require.config
  baseUrl: '/Scripts'
  waitSeconds: 10
  paths: 
    bootstrap:                './lib/bootstrap/bootstrap'            
    domReady:                 './lib/domReady/domReady'
    knockout:                 './lib/knockout/knockout-2.2.1.debug'
    jquery:                   './lib/jquery/jquery-1.9.1'
    sammy:                    './lib/sammy/sammy-0.7.4'
    myPage:                   './app/pages/myPage'
    myViewModel:              './app/viewModels/myViewModel'
  shim:
    bootstrap: 
      deps: ["jquery"]
    sammy:
      deps: ["jquery"]
      exports: "Sammy"

这是我的页面 javascript

require ['knockout', 'myViewModel', 'domReady!' ], ( ko, viewModel ) ->
  myViewModel = new viewModel       
  ko.applyBindings( myViewModel )

这是我的 View 模型

define [ 'jquery', 'sammy', 'knockout' ], ( $, sammy, ko ) ->
  class myViewModel
    constructor: ( options ) ->
      self = @
      @sammypath = ko.observable( 1 )

      @router = $.sammy( -> 
        @get '#/', ( data ) ->
          self.sammypath( 1 )
      )
      @router.run()

但是,当我尝试调用 $.sammy

时出现错误
Uncaught TypeError: Object function ( selector, context ) 
{ // The jQuery object is actually just the init constructor 'enhanced' 
     return new jQuery.fn.init( selector, context, rootjQuery ); } 
has no method 'sammy'

我猜是 require.config 出了点问题,但老实说我不确定。

sammy-0.7.4.js 文件下载正常。

传递给 View 模型中define的sammy不为null

我在 sammy 文件上设置了一个断点,它被击中并识别出它是一个 AMD 模块。我只是不确定为什么它不将自己添加到 jQuery 命名空间。

我仔细检查了页面是否首先正确加载,但 domReady 模块负责处理。

我也在使用 coffeescript,但我认为这不是问题。

最佳答案

为了让 sammy 工作,我只是删除了 $. 符号,因为我正在注入(inject)它

@router = sammy( -> 
  @get( '#/', ( data ) ->
    self.sammypath( 1 )
  )
)

不幸的是,我似乎无法让 $.sammy 工作。 The RequireJs documentation有一些关于如何让 $.sammy 工作的提示

var require = {
    deps: ["some/module1", "my/module2", "a.js", "b.js"],
    callback: function(module1, module2) {
        //This function will be called when all the dependencies
        //listed above in deps are loaded. Note that this
        //function could be called before the page is loaded.
        //This callback is optional.
    }
};

看起来我可以使用回调来让它与类似的东西一起工作

var require = {
    deps: ["jquery", "sammy"],
    callback: ($, sammy) ->
      $.sammy = sammy
}

但我不能让它与 require.config 一起玩,如果有人知道如何排序,请告诉我!我见过其他人使用 knockoutko 以及映射插件 ko.mapping

做类似的事情

关于javascript - 将 SammyJs 与 RequireJs 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348123/

相关文章:

jquery - 如何使用 Ajax 获取在输入字段中输入的内容?

javascript - ReactJS 和 RequireJS -> 如何使用从一个模块返回的多个类?

javascript - 如何在浏览器中使用require

javascript - requirejs 与 jQuery .domready() 未正确触发

javascript - 如何使谷歌地图API中的特定区域仅可见?

javascript - webGL通过鼠标点击绘制2D三 Angular 形

javascript - Twitter Bootstrap 下拉菜单的事件处理程序?

javascript - 在 Sinatra 中执行 Javascript

node.js - 安装后如何执行 'coffee'命令?

javascript - 线性刻度的十字准线/x 值工具提示