2012-12-20 29 views
3

我有一個骨幹項目,我使用require.js來模塊化代碼。在Backbone + Requirejs中使用墊片包含一個自定義Jquery插件

我main.js看起來是這樣的:

require.config({ 
    paths:{ 
     jquery:'../../../../core/js/external/jquery/jquery-1.8.2', 
     underscore:'../../../../core/js/external/underscore/underscore', 
     backbone:'../../../../core/js/external/backbone/backbone', 
     text:'../../../../core/js/external/require/text', 
     backbone_paginate:'../../../../core/js/external/backbone/backbone.pagination', 
     'jquery.sprites':'../../../../core/js/sprites', 
     'jquery.sprite_util':'../../../../core/js/util/spriteUtil' 


    }, 
    shim:{ 
     'backbone':{ 
      deps:['underscore', 'jquery'], 
      exports:'Backbone' 
     }, 
     'underscore':{ 
      exports:'_' 
     }, 
     'jquery.blades':{ 
      deps:['jquery'] 
     }, 

     'jquery.sprites':{ 
      deps:['jquery'] 
     }, 
     'jquery.sprite_util':{ 
      deps:['jquery.sprites'] 
     } 
    } 
    } 
}); 
require(['../app'], function (AppView) { 
    "use strict"; 
    new AppView(); 
}); 

所以,這裏的jquery.sprites和jquery.utils是我需要的,而不包括他們在我的意見使用的插件。目前,我必須將它們包括在任何使用它們的地方。對於exaample:

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'views/SimpleNamedObjectView', 
    'jquery.sprites', 
    'jquery.sprite_util', 


], function($, _, Backbone, SimpleNamedObjectView){ 
    "use strict"; 

有沒有一種方法,我可以訪問jquery.sprites和jquery.sprite_util不包括他們在每看法?它可以成爲main.js所有視圖的全局,以便我可以使用這些插件的功能,而不必將它們包含在所有視圖中? 例如這個。$ el.getSprites(); (其中getSprites是jquery.sprites的一種方法)

回答

3

一旦它們被加載,當它們被「擦亮」時,它們將在全球範圍內可用。

因此,您可以在您的引導require呼叫main.js內調用它們作爲依賴關係。這會工作。

但是!這完全違背了Require.js和AMD的理念。每個模塊都應聲明它們的所有依賴關係,以便它們都可以單獨加載並按原樣運行。這也可以使單元測試更簡單。

所以,你可以,但你真的不應該這樣做

+0

我同意你的意思。但是舉例來說,我已經下載了一個像Datepicker這樣的jquery插件,並且我希望它可以在我的應用程序中成爲全局的,因爲許多視圖都會使用該插件,難道你不認爲將它變成全局是個好主意嗎? – Sudo

+1

不,因爲如果你不跟蹤每個模塊中的依賴關係,那麼如果你決定刪除它,你可能會破壞某些東西,或者當不再使用依賴關係時你可能不會。在任何情況下,它都可以在全球範圍內使用,但將來很難擴展您的應用程序(與其他新開發者,其他開發者以及未來的自己)。 –

相關問題