2013-10-23 32 views
0

我有兩個相互關聯的問題。我可以在require.config中爲子依賴項設置不同的路徑嗎?

第一個是我想要一個名爲backbone的文件夾,並且與具有骨幹作爲路徑中庫的簡稱相沖突。似乎RequireJS認爲骨幹網/模型/用戶是骨幹庫的一個孩子或什麼的。解決方案,命名大寫爲B的庫骨幹。

第二個問題是我使用ModelBinder,它具有「骨幹」作爲依賴項。解決方案,更改縮小的文件。

這兩個解決方案似乎都是在RequireJS配置中沒有做正確的事情,但我無法弄清楚我做錯了什麼。

我的公共文件夾結構是這樣的:

public/ 
    js/ 
    backbone/ 
     model/ 
     ... 
     view/ 
     ... 
    vendor/ 
     backbone.min.js 
     Backbone.ModelBinder.js 
     ... 
    common.js 

我common.js有這樣的事情:

require.config({ 
    baseUrl: "/js", 
    shim: { 
     'underscore': { 
      exports: '_' 
     }, 
     "Backbone" : { 
      deps: ["underscore", "jquery"], 
      exports: 'Backbone' 
     } 

    }, 
    paths: { 
     underscore: 'vendor/underscore.min', 
     jquery: 'vendor/jquery', 
     model_binder: 'vendor/Backbone.ModelBinder', 
     Backbone: 'vendor/backbone.min' 
    } 
}); 

所以我的兩個問題是:我如何才能保持Backbone.ModelBinder因爲它是,並告訴requirejs當圖書館要求骨幹時,它要求js/vendor/backbone.min.js而不「污染」我的全球路徑。

爲什麼我不能在路徑中同時使用主幹(小寫字母b)和目錄?

回答

1

一個解決方案(是的,沒有那麼理智)是針對每目錄paths定義js/backbone下,即:

require.config({ 
    ... 
    paths: { 
     ... 
     backbone: 'vendor/backbone.min', // NOTE lower-case 'b', as desired 
     "backbone/model": "backbone/model", 
     "backbone/view": "backbone/view", 
     ... // and so on 
    } 
}); 

這也意味着,有直接js/backbone下沒有模塊。

另一種方法是保持資本「B」爲骨幹的模塊名稱和使用的Backbone.ModelBinder.jsmap配置:

require.config({ 
    ... 
    paths: { 
     ... 
     Backbone: 'vendor/backbone.min' // NOTE capital 'B' again 
    }, 
    map: { 
     "model_binder": { 
      "backbone": "Backbone" 
     } 
}); 

Thinkng追溯,該map可應用於所有模塊,以便每當他們請求"backbone"(小寫'b')時,您提供"Backbone"

require.config({ 
    ... 
    paths: { 
     ... 
     Backbone: 'vendor/backbone.min' // NOTE capital 'B' again 
    }, 
    map: { 
     "*": { // <------ Here difference form code above 
      "backbone": "Backbone" 
     } 
}); 

現在任何人都可以要求"backbone"並獲得Backbone或"backbone/model/User"(或"backbone/module")並獲得相應的模塊。

+0

我用第一種方法,它的工作原理,但它似乎是一個錯誤。如果我沒有定義:'backbone/views':'backbone/views,我得到錯誤/js/vendor/backbone.min/views/MyView.js 404(Not Found)。 –

相關問題