2012-08-12 25 views
2

我想我不完全理解的方式require.js作品。下面是一個簡單的模塊,我創建:處理require.js

requirejs.config({ 
    paths: { 
    'underscore' : 'libs/underscore-min', 
    'backbone'  : 'libs/backbone-min' 
    } 
}); 

define([ 
    "underscore", 
    "backbone" 
    ], function(_, Backbone) { 
    console.log(_); 
    console.log(Backbone); 
    var MyCollection = Backbone.Collection.extend({ 
     initialize: function() { 
      this.on("all", function(event) { 
       console.log(event); 
      }); 
     } 

    }); 

    return MyCollection; 
}); 

我從我的html加載:

<script data-main="js/mycollection.js" src="js/libs/require.min.js"></script> 

的問題是間歇工作。有時Backbone對象在我需要的時候出現在函數中,有時它不會(並且給我提供了http://requirejs.org/docs/errors.html#notloaded錯誤)。如果我只是在瀏覽器中重新加載,我會得到50/50的改變。

我必須在這裏錯過一些非常基本的東西,報告的錯誤對我沒有任何意義,我認爲require.js機制的整個想法是我的函數只有在加載所有依賴時才被調用。

回答

3

我的猜測是,你不使用下劃線和骨幹的AMD版本。如果是這種情況,並且這兩個軟件包沒有被封裝爲AMD模塊 - 那麼用於模塊的定義函數將不會像它應該那樣工作。

對於非模塊JS腳本時,更合適的形式是使用require()功能。

或 - 你可以找到下劃線和骨幹的AMD版本在這裏。 AMD的支持在某些時候被從Underscore和Backbone中取出。

AMD Underscore

AMD Backbone

5

由於下劃線和骨幹還沒有被定義爲AMD模塊,require.js不知道下劃線骨幹的依賴。所以我猜想50%的情況會發生什麼,當Backbone嘗試使用它時,Underscore並未加載。

可以使用require.js墊片配置http://requirejs.org/docs/api.html#config-shim講述依存結構require.js。