什么是以下两行代码的优点和缺点? 我不明白为什么有两种不同的方式做同样的事情。
this.listenTo(app.Todos, 'change:completed', this.filterOne);
app.Todos.on('change:completed', this.filterOne);
同时使用。对时,我怎么确定是默认的情况下?
什么是以下两行代码的优点和缺点? 我不明白为什么有两种不同的方式做同样的事情。
this.listenTo(app.Todos, 'change:completed', this.filterOne);
app.Todos.on('change:completed', this.filterOne);
同时使用。对时,我怎么确定是默认的情况下?
listenTo
是较新的,更好的选择,因为这些监听器将自动为您在取出stopListening
当一个视图被移除时调用(通过remove()
此前listenTo
不存在与幻象的看法挂撒手人寰(内存泄漏,造成的不当行为),因为视图方法被作为模型事件侦听器,即使视图实例本身是在DOM的时间了,不再被引用的一个非常阴险的问题。
如果你想阅读后面的故事listenTo
,搜索骨干GitHub的仓库中listenTo
,并通过一些较长的问题进行讨论的读取。
至于默认的情况下,有几种情况可以结束绑定到this
:
this.listenTo
,它总是会认为实例(由维姆斜睨着在评论中指出) this.listenTo
,故事变得复杂 foo.on
),骨干网将使用(因此这是一个比较可靠的方法) function () {//your event handler}.bind(this)
,你也可以手动控制的情况下(也建议) _.bind
或$.proxy
是ECMA可用替代function.bind
this.bindAll('onClick', ...)
将确保视图实例是this
背景下,当任何视图方法作为事件处理程序 events
属性将得到由骨干自动绑定您的视图实例(这个是带和背带bindAll
) 所以总结成一些指导原则:
events
属性只要有可能,因为它是简洁和正确的 this.listenTo
所有绑定模型和集合 Function.bind
因为哎,标准,但也有几个很好的选择这里。 随着listenTo
,你要听作为第一个参数传递其事件的对象。 在的情况下on
,它实际上是在该对象上的方法。
的优势listenTo
过on
有:
该监听跟踪所有的事件处理程序,使它更容易在需要时立即将它们全部删除。
回调的背景下总是被设置为监听器本身。