使用require.js尝试模块加载(AMD)时出错

时间:2012-02-18 05:44:13

标签: javascript jquery backbone.js requirejs amd

此时我对requirejs感到有点沮丧。

我正在尝试在App.coffee文件中加载jquery和其他库。问题是我无法在我的定义中加载模块依赖项。一些输入参数(jq,jsn等)为null或只是HTMLDocument对象。这会根据我尝试的插件的排列而改变:'order','domReady'或none。

我的js lib目录看起来像A)。我的App.coffee文件看起来像B)。我试过在require.config中使用'paths',只是原始文件引用(你在下面看到的)。我知道requirejs-jquery集成。但我不应该order my plugin loading吗?

如果我尝试命名'paths',我会得到一组不同的错误。我看到有人suggested jquery 1.7also here)。这管用吗?我首先想退后一步,确保我正确地理解了这些概念。 i)require.config ii)模块定义w /依赖项,iii)订单插件等。

如果我正确地理解了这些概念,我认为这是一个jquery版本问题。但是,它不仅仅是jquery作为依赖。以这种方式浪费时间令人难以置信。任何帮助表示赞赏。提前致谢。

A)


    $ tree js/lib/
    js/lib/
    ├── backbone.js
    ├── backbone_loader.js
    ├── domReady.js
    ├── jquery-1.6.3.js
    ├── json2.js
    ├── order.js
    ├── pure.js
    ├── require.js
    └── underscore.js

B)


    require.config({
      baseUrl: "/js",
      paths:
        order : '/js/lib/order'
        jQuery : '/js/lib/jquery-1.6.3'
        json2 : '/js/lib/json2'
        Underscore : '/js/lib/underscore'
        Backbone : '/js/lib/backbone_loader'
        pure : '/js/lib/pure'
    })


    define( [ 'js/lib/order!js/lib/jquery-1.6.3',
              'js/lib/order!js/lib/json2',
              'js/lib/order!js/lib/underscore',
              'js/lib/order!js/lib/backbone',
              'js/lib/order!js/lib/pure',
              'js/lib/order!js/bkeeping/models', ]
      (jq, jsn, und, bbn, pur, models) ->

        console.log('bkeeping LOADED')

        # return an object with the models in it  
        models : models
        jQuery : jq.noConflict()
        json2 : jsn 
        Underscore : und.noConflict()
        Backbone : bbn.noConflict()
        pure : pure
    )

2 个答案:

答案 0 :(得分:0)

最新的jQuery支持AMD加载器,并且使用require.js表现良好。 Underscore和Backbone没有,你需要:

  1. 使用修改后的版本,例如来自require。
  2. 的作者的one
  3. 使用插件。我找到了用途!来自here的插件完全符合我的需求。

答案 1 :(得分:0)

感谢您的指示。

但我去了jquery-1.7,但仍然不得不从全球空间拉出来获取对象。这适用于我现在的其他库及其依赖项。我最终做的是返回一个带有依赖项的对象。我使用order plugin完成了库加载。

依赖对象的合同被传递到你的回调函数(jq,pur,jsn等),对这些库来说根本不起作用。它适用于我定义的模块(例如:模型),但不适用于外部库。我尝试了use plugin,但发现它不适用于下划线和主干,或者我没有正确设置它。这是我现在可行的解决方案;虽然我不得不说头痛严重影响了require.js的好处。


    define( [ 'order!js/lib/jquery-1.7',
              'order!js/lib/pure',
              'order!js/lib/json2',
              'order!js/lib/underscore',
              'order!js/lib/backbone',
              'order!bkeeping/models', ]
      (jq, pur, jsn, und, bbn, models) ->

        console.log('bkeeping LOADED')

        # return an object with the dependencies in it 
        models : models
        jQuery : jQuery.noConflict()
        pure : pur                      # pure and json2 objects are simply used in other libs. I don't need them directly
        json2 : jsn 
        Underscore : _.noConflict()
        Backbone : Backbone.noConflict()
    )

相关问题