编程语言
首页 > 编程语言> > javascript-将SammyJs与RequireJs一起使用

javascript-将SammyJs与RequireJs一起使用

作者:互联网

我有些麻烦让sammyjs和requirejs一起玩.调用$.sammy失败,并且错误表明jQuery名称空间中未定义sammy.

这是我的要求配置

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文件.

传递给视图模型中的定义的sammy不为null

我在sammy文件上贴了一个断点,它被击中并意识到它是AMD模块.我只是不确定为什么它不将自身添加到jQuery名称空间中.

我再次检查了页面是否首先正确加载,但是domReady模块可以解决该问题.

我也在使用coffeescript,但是我认为那不是问题.

解决方法:

为了让公司工作起来很聪明,我只花了$.符号,因为我正在注入它

@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配合使用!我已经看到其他人使用淘汰赛和ko以及映射插件ko.mapping做类似的事情

标签:coffeescript,requirejs,sammy-js,amd,javascript
来源: https://codeday.me/bug/20191123/2065061.html