2012-02-18 41 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完美適合我的需求。
相關問題