我有一个需要Backbone,Undescore,jquery等的视图。
例如
define(['jquery','undescore','backbone','subviewA', 'subviewB'], function($,_,Backbone, SubviewA, SubviewB){
var View = Backbone.View.extend({
//other methods here
render : function() {
this.subviewA = new SubviewA();
this.subviewA.render();
this.subviewB = new SubviewB();
this.subviewB.render();
return this;
}
});
});
子视图示例
define(['jquery','undescore','backbone','text!templates/subviewA'], function($,_,Backbone, template){
var SubviewA = Backbone.View.extend({
//other methods here
render : function() {
this.$el.html(template);
return this;
}
});
});
我的问题是,如果我需要在子视图中包含jquery,unexcore和backbone,我可以省略它们吗?
修改
我在r.js中询问原因我每次都需要告诉它不要在每个模块中生成这些依赖项。
答案 0 :(得分:0)
理论上,如果你不在视图中使用$或_符号,则不需要将jquery和下划线列为模块的直接依赖项(无论是视图还是子视图都不会改变它)。 您确实需要包含骨干,因为您直接引用它:Backbone.View。如果您想完全确定Backbone符号已定义,则应将其声明为依赖项。
有些lib将自己注册为AMD模块和全局变量(通常jquery会这样做)。 Backbone不直接支持AMD,无论如何使用,都在全局级别注册。从理论上讲,你不能将它声明为依赖项,但是你有风险,需要在加载骨干之前尝试加载脚本,在这种情况下,不会定义Backbone符号。
如果您重新声明除了附加caracters之外的依赖项,那么附加脚本大小就没那么重要了。
答案 1 :(得分:0)
您可以省略任何未使用的要求。
在您的示例中(忽略省略的代码!),您可以删除jquery
和undescore
(原文如此),但不 backbone
(因为您通过Backbone.View.extend
)。
显然,您需要保持您的需求名称和变量同步。