Javascript 自定义主干。查看undelegateEvents(),它是如何工作的?

Javascript 自定义主干。查看undelegateEvents(),它是如何工作的?,javascript,backbone.js,Javascript,Backbone.js,您可以在主干视图中实现自定义的delegateEvents()和undelegateEvents() 主干.View构造函数自动调用delegateEvents。我以为在使用Backbone.view.prototype.remove删除视图时调用了undelegateEvents,但事实并非如此 那么,手动执行此操作的最佳方式是什么?我已用以下代码覆盖了remove()view方法: Backbone.View.prototype.remove = function() { var r

您可以在主干视图中实现自定义的
delegateEvents()
undelegateEvents()

主干.View构造函数自动调用delegateEvents。我以为在使用Backbone.view.prototype.remove删除视图时调用了undelegateEvents,但事实并非如此

那么,手动执行此操作的最佳方式是什么?我已用以下代码覆盖了
remove()
view方法:

Backbone.View.prototype.remove = function() {
    var remove = Backbone.View.prototype.remove;

    if (this.undelegateEvents) {
      this.undelegateEvents();
    }

    return remove.apply(this, arguments);
};

这是可行的,但我不知道这是否是最好的选择。我应该怎么做呢?

因为mu太短,所以我建议,这才是问题的真正答案

手动执行此操作的最佳方式是什么


就是不要。事件绑定到DOM元素,如果这些元素消失,绑定也会消失
undelegateEvents
设计用于不删除DOM元素,但仍希望从中删除事件绑定的情况(例如,为视图设置新元素时)。

如果要从DOM中删除视图的
el
,为什么需要调用
undelegateEvents
委托
附加到视图的
el
上,因此只需删除
el
就足够了。您还可以创建一个基本的
视图
类(从Backbone.view扩展),它覆盖默认的
remove()
方法(基本上就是您上面编写的代码)。然后,所有其他视图都将扩展基本视图,而不是主干.view。这样,您就不必重写默认主干行为。我知道。但您可以使用
undelegateEvents()
手动删除所有配置的事件委派。在主干文档->中:向视图添加了一个UnelegateEvents,允许您手动删除所有已配置的事件委派。我的问题是。。。我可以在何处以及如何使用undelegateEvents执行此操作?随时随地;你可能是想得太多了。您甚至可以在您特别询问的时候(删除视图时)执行此操作。。。没什么意义。如果您想在其他时间执行此操作,只需调用
yourView.undelegateEvents()。这样就没有什么神秘的了,这里是
undelegateEvents
实际做的事情的总和:
this.el.unbind('.delegateEvents'+this.cid)换句话说,从该视图的元素中删除来自该视图的所有事件绑定。