2014-05-06 58 views
0

從日誌中,Backbone現在註冊AMD(Require.js)自v1.1.1以來的版本。Backbone AMD with requireJs

好,所以我嘗試做一個模塊相同,但有一些我不明白。

如果我們看section 4 of annotated sources的來源,模塊不會返回全局骨幹。

沒有需要墊片和window.Backbone是可用的。但是骨幹怎麼不能被定義?

//定義骨幹模塊

define(['underscore', 'jquery', 'exports'], function(_, $, exports) { 
    root.Backbone = factory(root, exports, _, $); 
}); 

//要求骨幹模塊

require(['backbone'], function (Backbone) { 
    Backbone // is not undefined ? 
}); 

//模態模塊定義

define(['jquery'], function ($) { 
    root.Modal = factory(root, {}, $); 
}); 

//需要模態模塊

require(['modal'], function (Modal) { 
    Modal // undefined 
}); 

進入我的模塊(使用相同的結構),當我需要我的模塊,我得到了undefined如果我不返回任何東西。

我必須返回root.Modal才能使其正常工作。 return root.Modal = factory(root, {}, $);

的主要問題是「怎麼能當模塊不返回任何需要的模塊?

我已經失蹤requireJS東西,但我並不覺得。

http://backbonejs.org/docs/backbone.html#section-4

+0

永遠不要使用窗口。Backbone,如果它註冊爲AMD模塊,則不需要「填充」,您的文件被命名爲「backbone.js」? –

+0

我不使用window.Backbone :) 你說我的模塊文件嗎?我有相同的文件結構modal.js。 –

+0

如果你在模塊內部調用「backbone」,你必須擁有「backbone.js」文件,除非你已經在這個名字之前映射了... –

回答

2

有問題的代碼是這樣的:

define(['underscore', 'jquery', 'exports'], function(_, $, exports) { 
    root.Backbone = factory(root, exports, _, $); 
}); 

注意現在factory被稱爲與exports作爲第二個參數。工廠函數將通過設置此對象上的字段來導出Backbone的方法。這就是爲什麼當你需要Backbone時,你會得到一個有用的值,而不是undefined或垃圾。

這個原因,這個工程是RequireJS支持從你給define工廠函數返回一個值定義模塊,所以你可以這樣做:

define(function() { 
    return { 
     foo: function() { ... } 
    }; 
}); 

但它也支持其他手段來做到這一點,例如像:

define(['exports'], function (exports) { 
    exports.foo = function() { ... }; 
}); 

在依賴項列表命名exports模塊上面的代碼是一個特殊的(並保留)模塊名,意思是「給我一個對象,我可以設置字段出口值」。 骨幹使用第二種方式導出值。

+0

謝謝!!!!!非常清楚! –