在主干js中的视图中嵌套视图

tgr*_*ser 11 javascript jquery dom circular-reference backbone.js

我正在使用backbone.js构建一些复杂的视图关系,我想知道从javascript性能角度看是否存在任何问题:

var viewOne = Backbone.View.extend({
         tagName : 'li',
         initialize : function() {
              this.v2 = new viewTwo({parent:this});
         },
         clickHideOne : function() {
              $(this.el).removeClass('selected');
         }
});

var viewTwo = Backbone.View.extend({
         tagName : 'a',
         initialize : function() {
              this.bind('click', this.clickHide, this);
         },
         clickHide(){
              $(this.el).removeClass('selected');
              this.options.parent.clickHideOne();
         }
});
Run Code Online (Sandbox Code Playgroud)

这是两个视图之间循环引用的一个非常简单的示例,为了使一个视图中的事件容易在视图链中向上传播,或者保持对父视图中对象的任何引用.是否有任何情况会出现问题,特别是与IE7 +中DOM元素引用的潜在泄漏有关,或者是否有另一个推荐的最佳实践来引用父视图.

另外,我明白我可以做$(this.el).parent('li').removeClass('selected'); 在视图中,这不是重点......这只是我对循环引用的一个非常简单的例子.

Kyl*_*ers 15

让父视图负责子视图并不是一个坏主意,并且在骨干网中是一种非常常见的情况.我在上面的代码中看到的问题是子视图知道其父视图.我建议在viewTwo中使用自定义事件,并让viewOne绑定到这些事件,然后相应地做出响应.

通过使用trigger()方法和bind()方法,骨干很容易实现.

  • 因为子对象不负责创建父对象,所以它应该不知道它并且完全独立.您基本上是在创建不必要的依赖项. (3认同)