2013-05-07 93 views
0

我正在使用Require.js,Backbone和Marionette進行項目工作,而在我的文件頂部的define/function調用變得有點可笑。我希望找到一種方法將「包含」從最上面的define塊中移出,並移入與之相關的extendRequire.js&Marionette:定義包括擴展類時

所以我大致結構如下所示:

define(['underscore','jquery','handlebars','someTemplate','someModel',etc...], function(_,$,Handlebars,template,model,etc...){ 
    var someView = Backbone.Marionette.ItemView.extend({ 
    // code here 
    }); 
    return someView; 
}); 

所以我添加更多的意見文件,即define列表變得真的,真的,很長。我試着做這樣的事情:

var someView = define(['someTemplate','someModel'], function(template, model){ 
    return Backbone.Marionette.ItemView.extend({ 
    // code here 
    }); 
]); 

但隨後是不確定的,當我後來把它。我做錯了,還是不可能?

+0

你可以嘗試(糖)[http://requirejs.org/docs/whyamd.html#sugar]語法。這種方式你不必擔心匹配的參數 – deven98602 2013-05-07 17:55:25

回答

5

你應該拆分你的模塊。有很長的依賴列表是你模塊做得很好的標誌。大多數情況下,所有視圖需求都是模型或集合,也可能是一些子視圖和全局事件總線。

另外考慮需要jQuery,Backbone等。這是你在大多數模塊中需要的東西,它更容易將它們合併到一個文件中,並首先加載它們。要求這個文件沒有太大的優勢,它所做的就是用很多樣板來混淆你的定義部分。

define call btw。不會返回任何說明爲什麼在示例中未定義。如果您真的想要使用此解決方案,則稍後在使用時必須使用require。但即使如此,它更清潔地把放在它自己的模塊文件中。

2

您可以使用您require.js配置文件相關墊片聚集你的「普通」或需要 模塊集成到一個命名空間:

shim: { 
     marionette: { 
      deps: ["backbone", "json2", "bootstrap", "backboneRpc"], 
      exports: 'Marionette' 
     }, 

     flot_pie: { 
      deps: ['jquery', 'charting', 'flot_resize'], 
      exports: '$.plot' 
     }, 
    } 

所以現在你可以調用所有你需要的是這樣的:

define([ 
    'marionette', 
    'flot_pie' 
], 

function(Marionette, graph) {