我有点麻烦让 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
一起玩,如果有人知道如何排序,请告诉我!我见过其他人使用 knockout
和 ko
以及映射插件 ko.mapping
关于javascript - 将 SammyJs 与 RequireJs 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348123/