我正在使用Require.js,Backbone和Marionette开发一个项目,而我文件顶部的define/function
调用变得有点荒谬。我想找到一种方法将“包含”移出最顶层的define
块,并转移到相关的extend
。
所以我的结构大致如下:
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
});
]);
但是当我稍后调用它时,someView
是未定义的。我做错了,还是不可能?
答案 0 :(得分:5)
您应该拆分模块。拥有一个非常长的依赖项列表是一个标志,你的模块做了很多。大多数情况下,所有视图需要的是模型或集合,可能还有一些子视图和全局事件总线。
还要考虑需要jQuery,Backbone等。这些是大多数模块中需要的东西,它更容易将它们组合在一个文件中并首先加载它们。要求使用这些文件没有太大的好处,它所做的就是使你的定义部分混乱很多样板。
定义调用btw。不会返回任何为什么someView
在示例中未定义的原因。如果您真的想使用此解决方案,则稍后使用require
时必须使用someView
。但即便如此,将someView
置于其自己的模块文件中也更加清晰。
答案 1 :(得分: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) {