2012-07-15 153 views
4

我正在使用requireJS建立一個網站。requireJS與骨幹依賴項

這是我第一次使用requireJS。

i相路徑在main.js配置requireJS:

require.config({ 
    paths: { 
    'jquery': 'libs/jquery/1.7.2/jquery', 
    'underscore': 'libs/underscore/1.3.3-amdjs/underscore', // AMD support 
    'backbone': 'libs/backbone/0.9.2-amdjs/backbone', // AMD support 
    'marionette': 'libs/marionette/0.9.3-amd/backbone.marionette', // AMD support 
    'templates': '../templates' 
} 
}); 

,並在模型,視圖集合我使用;

define([  
'jquery', 
'backbone' 
], function ($) { 
    var Geo = Backbone.Model.extend({}); 

    return Geo; 
}); 

什麼是我不明白的是:爲什麼我必須保持定義的jQuery &骨幹作爲一個依賴。 我的意思是這個項目和模型將永遠不會沒有jQuery /主幹運行。

那麼爲什麼不加入jQuery和骨幹到index.html作爲腳本標籤,並保存在每一個可能的對象引用它們。我知道它會污染全球命名空間,但這不合理嗎?

任何建議appriciated。

歡呼聲,

回答

2

@Guy,它是可選的定義它們,但是如果你想要保持一致,比你更好。這是Require.JS建議的體系結構。這並不意味着每次將它們定義爲迭代時它都會嘗試加載jQuery或Backbone。

另外,在您的示例中,您不需要在回調function()參數中使用$。 jQuery和$將已經在窗口中。

define([  
'jquery', 
'backbone' 
], function ($) { 
    var Geo = Backbone.Model.extend({}); 

    return Geo; 
}); 

此外,在生產,因爲我們有時會用很大的依賴性,我們這樣做是這樣的:你每次在依賴列出require然後明確指定瓦爾時間,因爲一些依賴沒有AMD支持,做不歸還你所期望的:

define([  
    'require' 
    'moduleA', 
    'moduleB' 
], function (require) { 
    var moduleA = require('moduleA'), 
     moduleB = require('moduleB'); 

    /* code */ 
    return; 
}); 
0

我覺得你的理解是正確的,因爲jQuery是無處不在,將被用作index.html頁面完全在我的項目,我這樣做是在全球參考。

0

我覺得如果你使用r.js來優化你的項目是每一個js文件中添加RequireJS非常有用。

0

如果創建模塊A和B,並希望它們拖放到另一個項目中,依賴被清楚地聲明。如果另一個項目只使用沒有jQuery的ExtJS?或者如果他們使用zepto而你特別需要jquery的庫?簡單地爲jquery添加一個配置就足夠了.jquery將在需要時加載。

你不能依靠公共庫的存在。將模塊包裝在requirejs外殼中可以保證庫的依賴關係存在。而且這是一個更快的:) http://jsperf.com/requirejs-include-faster(好吧,顯然除了ie ..去圖)

另外,除非你真的使用jQuery,你不應該要求它。你爲什麼要在骨幹模型中使用?即使在視圖中,你也可以使用這個。$ el,它給出一個jquery對象來追蹤 - this。$ el.find('。someclass')