骨干JS .listenTo VS。对骨干JS .listenTo VS。对(Backbone js

2019-05-08 16:12发布

什么是以下两行代码的优点和缺点? 我不明白为什么有两种不同的方式做同样的事情。

this.listenTo(app.Todos, 'change:completed', this.filterOne);
app.Todos.on('change:completed', this.filterOne);

同时使用。对时,我怎么确定是默认的情况下?

Answer 1:

listenTo是较新的,更好的选择,因为这些监听器将自动为您在取出stopListening当一个视图被移除时调用(通过remove() 此前listenTo不存在与幻象的看法挂撒手人寰(内存泄漏,造成的不当行为),因为视图方法被作为模型事件侦听器,即使视图实例本身是在DOM的时间了,不再被引用的一个非常阴险的问题。

如果你想阅读后面的故事listenTo ,搜索骨干GitHub的仓库中listenTo ,并通过一些较长的问题进行讨论的读取。

至于默认的情况下,有几种情况可以结束绑定到this

  • 如果你在通过结合this.listenTo ,它总是会认为实例(由维姆斜睨着在评论中指出)
  • 没有this.listenTo ,故事变得复杂
    • 对于其它事件,这将是全局对象(最好避开这个)
    • 对于DOM事件,这将是源元素,就像在常规的DOM事件绑定
    • 如果你提供一个明确的情况下(第三参数foo.on ),骨干网将使用(因此这是一个比较可靠的方法)
    • 如果您使用的ECMA标准function () {//your event handler}.bind(this) ,你也可以手动控制的情况下(也建议)
    • 作为@mu指出, _.bind$.proxy是ECMA可用替代function.bind
    • 对于骨干网的意见,做this.bindAll('onClick', ...)将确保视图实例是this背景下,当任何视图方法作为事件处理程序
  • 通过使用视图的标准有线的任何事件, events属性将得到由骨干自动绑定您的视图实例(这个是带和背带bindAll

所以总结成一些指导原则:

  • 使用events属性只要有可能,因为它是简洁和正确的
  • 使用this.listenTo所有绑定模型和集合
  • 任何附加绑定记得结合上下文可靠地使用首选方法。 我通常使用ECMA Function.bind因为哎,标准,但也有几个很好的选择这里。


Answer 2:

随着listenTo ,你要听作为第一个参数传递其事件的对象。 在的情况下on ,它实际上是在该对象上的方法。

的优势listenToon有:

  • 该监听跟踪所有的事件处理程序,使它更容易在需要时立即将它们全部删除。

  • 回调的背景下总是被设置为监听器本身。



文章来源: Backbone js .listenTo vs .on
标签: backbone.js