2012-11-01 34 views
3

我正在構建一個單一頁面的Web應用程序,其中一個需求是jQuery,jQuery-ui和我決定在開發過程中使用的任何jQuery插件。我是否應該通過包括jQuery的RequireJS加載所有內容?

我也在研究RequireJS和Backbone來構成應用程序的MVC結構。 雖然我毫不懷疑RequireJS在加載我創建的Backbone MVC模塊時非常有用,但我對使用它加載jQuery及其插件感到無動於衷。

這是因爲我認爲jQuery可以在全局命名空間中使用,因爲它將在整個應用程序中的任何地方使用。

所以我的問題是:在模塊化組件和我認爲必要的全局組件jQuery之間做出這樣的分離可以嗎?

回答

1

你想是這樣的:

require.config({ 
    baseUrl: "/js/", 
    paths: { 
    jquery: 'libs/jquery/jquery-1.7.1', 
    'jquery.mobile-config': 'libs/jqm/jquery.mobile-config', 
    'jquery.mobile': 'libs/jqm/jquery.mobile-1.1.0', 
    'jquery.mobile.asyncfilter': 'libs/jqm/asyncfilter', 
    underscore: 'libs/underscore/underscore-1.3.3', 
    backbone: 'libs/backbone/backbone-0.9.2', 
    templates: '../templates' 
    }, 
    shim: { 
      'underscore': { 
      exports: "_" 
      }, 
      'backbone': { 
       //These script dependencies should be loaded before loading 
       //backbone.js 
       deps: ['jquery','underscore'], 
       //Once loaded, use the global 'Backbone' as the 
       //module value. 
       exports: 'Backbone' 
      }, 
      'jquery.mobile-config': ['jquery'], 
      'jquery.mobile': ['jquery','jquery.mobile-config'], 
      'jquery.mobile.asyncfilter': ['jquery.mobile'], 
     } 
}); 

require([ 
    'jquery', 
    'app', 
    'jquery.mobile','jquery.mobile.asyncfilter' 
], function($, App){ 
    $(function(){ 
     App.initialize(); 
    }); 
}); 

在你的情況,你會用jquery-ui的東西來替換jquery-mobile的東西。同樣的想法。 Jquery非常聰明,可以將自己置於全局命名空間中,其餘的根據你的版本而不是(通常來說)。希望這可以幫助你。請記住,如果你使用不兼容的庫,你會想把它扔在墊片中,就像你上面看到的那樣。墊片是手動包裝庫的捷徑(又名,你自己)。

+0

有趣的是,我認爲使用腳本加載的單一方法確實更加清潔,我會更多地考慮這一點,並稍後參考您的示例。謝謝 – Flosculus

2

我們做類似的事情,不要使用require來加載'全局'組件,比如jQuery和下劃線,儘管我們使用require來加載我們的模塊。我認爲這兩種方法都是有效的(使用require來加載jQuery)。

選擇requireJS加載自定義模塊的原因之一,是因爲您希望運行優化程序作爲構建&部署過程的一部分,以儘量減少應用程序必須加載的腳本文件的數量。優化器(如r.js)可以跟蹤您指定的依賴關係,以便requireJS幫助確定要創建的捆綁JS文件。如果您使用多個第三方庫,則可能需要將它們捆綁到一個JS文件中。這將是選擇使用requireJS來加載jQuery的一個原因。

否則,我認爲這取決於您的偏好。如果您在應用程序中使用requireJS,我不知道爲什麼「應該」使用requireJS加載jQuery的技術原因。

我建議閱讀本文。它更多的是如何比爲什麼,但它仍然是有用的信息:http://requirejs.org/docs/jquery.html

也看看這個示例項目:https://github.com/jrburke/require-jquery

+0

非常感謝您的回覆,但您能否詳細說明一下?儘管這確實支持了我的假設,但這聽起來更像是你唯一告訴我我想聽到什麼。我的讚賞。 – Flosculus

+0

我更新了答案。 – Yossarian21

相關問題