2012-02-18 40 views
0

在这一点上,我对requirejs感到有些沮丧。错误尝试使用require.js模块加载(AMD)

我想在我的App.coffee文件中加载jquery和其他库。问题是我无法在我的定义中加载模块依赖关系。一些输入参数(jq,jsn等)为null或仅仅是HTMLDocument对象。这个改变基于我尝试插件的排列:'order','domReady',或者没有。

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

如果我尝试命名'路径',我会得到一组不同的错误。我看到有人suggested jquery 1.7also here)。这管用吗?我首先想退后一步,确保我的概念正确无误。 i)require.config ii)模块定义瓦特/依赖关系,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 
    ) 

回答

0

感谢您对此的指示。

但是我去了jquery-1.7,但仍然不得不从全局空间拉到对象。这适用于我现在的其他库,以及它们的依赖关系。我最终做的是返回一个包含依赖关系的对象。我用order plugin完成了图书馆加载。

传递到您的回调函数(jq,pur,jsn等)中的依赖对象的契约根本不适用于这些库。它适用于我定义的模块(例如:models),但不适用于外部库。我尝试了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() 
    ) 

+0

检查我对答案的链接。在那里设置使用插件将解决您的问题。没有必要订购! – ggozad 2012-02-18 16:24:18

+0

哦,是的,我在答案中看到了这些链接。但也许我只是没有正确设置它。对于requirejs,我现在只使用它作为我的内部模块([见这里](http://stackoverflow.com/questions/9383652/howto-use-jquery-serialscroll-scrollto-not-working))。我发现外部资源太麻烦了。 – Nutritioustim 2012-02-22 19:21:18

0

最新的jQuery支持AMD装载机和行为将罚款require.js。 下划线和骨干不和你将需要:

  1. 使用修改后的版本,比如one从作者的要求。
  2. 使用插件。我找到了使用!插件从here完美适合我的需求。
相关问题