Backbone.js 带有requirejs的主干:视图和子视图以及r.js

Backbone.js 带有requirejs的主干:视图和子视图以及r.js,backbone.js,requirejs,optimization,Backbone.js,Requirejs,Optimization,我有一个视图需要主干、Undescore、jquery等 范例 define(['jquery','undescore','backbone','subviewA', 'subviewB'], function($,_,Backbone, SubviewA, SubviewB){ var View = Backbone.View.extend({ //other methods here render : function() { this

我有一个视图需要主干、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、undescore和主干,我可以省略它们吗

编辑


我在问r.js中的原因,我每次都需要告诉它不要在每个模块中包含这些依赖项。

理论上,如果在视图中不使用$or u符号,则不需要将jquery和下划线列为模块的直接依赖项,无论它是视图还是子视图,都不会改变这一点。 但您确实需要包括主干,因为您直接使用:backbone.View引用它。如果要绝对确保主干符号已定义,则应将其声明为依赖项

一些lib同时注册为AMD模块和全局变量,jquery通常会这样做。主干网不直接支持AMD,无论其使用方式如何,它都在全球范围内注册。从理论上讲,您不能将其声明为依赖项,但这样做的风险是,在加载主干之前,您可能会尝试加载脚本,在这种情况下,将不会定义主干符号


如果您重复声明依赖项(除了额外的字符,因此增加了脚本大小),这没有多大关系。

您可以忽略任何未使用的需求

在您的示例中,忽略省略的代码!,您可以删除jquery和undescore,但不能删除主干,因为您可以通过backbone.View.extend使用它


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

您可以粘贴其中一个子视图模块的代码吗?您应该能够像上面一样列出依赖项。在此视图中不需要jquery和下划线,但在子视图中可能至少需要jquery。一般来说,您需要对您直接在该模型或视图中使用的内容提出要求,因为当我使用r.js时,我需要删除这些依赖项,因为它将在每个模块中构建它们。您确定您使用的是正确的吗?这听起来像是你优化了js文件而不是整个项目,我仍然使用,但它们是否可以作为父视图中的变量使用?除非你有一个非常奇怪的文件结构,你没有向我们展示,没有。