【发布时间】:2013-06-27 16:11:01
【问题描述】:
让 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 )
这是我的视图模型
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 文件下载正常。
视图模型中传递给define的sammy不为空
我在 sammy 文件上设置了一个断点,它被击中并识别出它是一个 AMD 模块。我只是不确定它为什么不将自己添加到 jQuery 命名空间中。
我首先检查了页面是否正确加载,但 domReady 模块会处理该问题。
我也在使用咖啡脚本,但我认为这不是问题。
【问题讨论】:
标签: javascript coffeescript requirejs amd sammy.js