主干与requirejs:视图和子视图和r.js

时间:2012-08-22 10:41:29

标签: backbone.js requirejs optimization

我有一个需要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中询问原因我每次都需要告诉它不要在每个模块中生成这些依赖项。

2 个答案:

答案 0 :(得分:0)

理论上,如果你不在视图中使用$或_符号,则不需要将jquery和下划线列为模块的直接依赖项(无论是视图还是子视图都不会改变它)。 您确实需要包含骨干,因为您直接引用它:Backbone.View。如果您想完全确定Backbone符号已定义,则应将其声明为依赖项。

有些lib将自己注册为AMD模块和全局变量(通常jquery会这样做)。 Backbone不直接支持AMD,无论如何使用,都在全局级别注册。从理论上讲,你不能将它声明为依赖项,但是你有风险,需要在加载骨干之前尝试加载脚本,在这种情况下,不会定义Backbone符号。

如果您重新声明除了附加caracters之外的依赖项,那么附加脚本大小就没那么重要了。

答案 1 :(得分:0)

您可以省略任何未使用的要求。

在您的示例中(忽略省略的代码!),您可以删除jqueryundescore(原文如此),但 backbone(因为您通过Backbone.View.extend)。

显然,您需要保持您的需求名称和变量同步。