1

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

编辑

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

4

2 回答 2

0

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

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

如果您重复声明依赖项(除了额外的字符,因此额外的脚本大小),这并不重要。

于 2012-08-22T10:53:03.787 回答
0

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

在您的示例中(忽略省略的代码!),您可以删除jqueryand undescore(sic) 但不能 backbone删除(因为您通过 使用它Backbone.View.extend)。

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

于 2012-08-22T10:53:56.107 回答