Backbone.js视图delegateEvents不受约束(有时)

Fri*_*rce 8 javascript javascript-events backbone.js

我正在使用Backbone.js,有时视图事件没有正确绑定.

我可以$(viewselector).data()在jQuery中检查事件绑定情况.大多数时候都有活动,有时候没有!

是否有任何我应该注意的已知事情会导致这种情况?

Jul*_*ien 16

初始化视图时,会将事件委派给this.el. 所以你需要:

  • 通过为构造函数提供"el"选项来指定元素来创建视图
  • 在视图上定义el,tag,id,classname,以直接在页面上创建或查找元素.
  • 将渲染视图附加到视图的"el"元素
  • 确保在创建视图后不替换"el"元素

对于最后一项,如果必须这样做,可以再次调用delegateEvents以在视图上重新委派事件.

  • Backbone.js中的`events:{}`块使用jQuery的.delegate()函数,它只是.live()函数的一种特殊形式,它本身就是.bind()函数的一种特殊形式,可以是在DOM元素存在之前声明.没有必要定义"el"属性以使元素起作用,因为backbone.js将使用用户tagName或默认情况下为您提供div. (4认同)
  • 当你不知道骨干如何工作:) (3认同)

Var*_*ian 12

我在这些场景中的方法是添加delegateEvents()具有事件的每个视图的渲染,如下所示:

  $(this.el).empty();
  $(this.el).html(this.template({}));
  this.delegateEvents(); // this will bind all events ONCE AGAIN
Run Code Online (Sandbox Code Playgroud)

这非常适合动态创建的视图,即每次点击左右声明为新的视图......

  • eek ...小心你没有泄漏事件绑定.我认为如果您反复绑定(delegateEvents-ing)但不解除先前绑定的绑定,则会发生这种情况. (3认同)