2012-07-09 66 views
8

我已經定義了一個RequireJs配置定義路徑和墊片:RequireJs:使用自動加載-DEPS與墊片

require.config({ 
    // define application bootstrap 
    deps: ["main"], 

    // define library shortcuts 
    paths: { 
     app: "app" 
     , jquery: "lib/jquery" 
     , underscore: "lib/underscore" 
     , backbone: "lib/backbone" 
     , bootstrap: "lib/bootstrap" 
    }, 

    // define library dependencies 
    shim: { 
     jquery: { 
      exports: "$" 
     }, 
     underscore: { 
      exports: "_" 
     }, 
     backbone: { 
      deps: ["underscore", "jquery"], 
      exports: "Backbone" 
     }, 
     bootstrap: { 
      deps: ['jquery'], 
      exports: "bootstrap" 
     }, 

     // main application 
     app: { 
      deps: ["backbone"], 
      exports: "App" 
     } 
    } 
}); 

正如你看到的最後一個「墊片」的聲明應該使它能夠訪問骨幹(和它的DEP )當我加載主App(-namespace)。

在現實中,這並不工作:

require(["app"], function($, _, Backbone, App){ 
    app.router = new Backbone.Router.extend({ 
     // routing and route actions 
    }); 
}); 

令我疑惑的是,在「脊樑 - boilderplate」 - 項目,骨幹(及其DEPS)可供選擇這種方式: https://github.com/tbranyen/backbone-boilerplate/blob/master/app/main.js

甚至不必在函數中定義它。

那麼我做錯了什麼?

+2

嘗試從擴展路由器的'require'函數中刪除'$,_,Backbone'。我認爲墊片的工作,以便他們只出口您不需要添加到任何調用的全局值 – jakee 2012-07-09 12:26:23

+0

嘿,這很好:)我甚至可以在定義函數的deps數組中刪除「主幹」關鍵字雖然這在每個模塊中都不起作用......您是否會創建一個答案,以便我可以解決這個問題? – 2012-07-09 14:37:55

+0

完成,很高興我能幫助! – jakee 2012-07-09 15:06:09

回答

5

從擴展路由器的require-功能中刪除$, _, Backbone-參數。墊片輸出全局值,因此不需要在requiredefine中調用它們,就像您爲常規依賴項所做的那樣。

將它們作爲參數傳遞給全局變量,最有可能導致它們未定義。

+1

一個精度:傳遞Backbone作爲參數隱藏全局定義,你可以直接使用'window.Backbone' – nikoshr 2012-07-09 15:21:11

11

從我讀過,requirejs傳遞參數,根據你的數組中指定的內容...因此你的電話應該是這樣的:

require(["app"], function (App) { // less arguments 
}); 

或者這樣:

require(
    ["jquery", "underscore", "backbone", "app"], // more deps 
    function ($, _, Backbone, App) { 
    } 
); 
+0

我投你一票。我不同意這一個jakee。 – Constantine 2013-01-24 22:19:56

+0

我同意。封裝依賴性是AMD的全部重點。你應該這樣做 – 2013-05-30 17:36:01

+0

而在這裏你有變量封裝,你不符合乾燥的原則。假設所有突然出現的'app'都比你在那裏列出的依賴更多。 – Toskan 2014-07-11 22:06:14