我正在研究骨干项目,在视图的初始化函数内部,我试图在集合上设置一个监听器,如下所示:
this.listenTo(this.collection, "change:attr", this.render)
然而,这并没有引起人们的关注。令人极为困惑的是,这实际上在它的位置上起作用:
this.collection.on("change:attr", this.render);
有谁知道为什么会这样?如果必须,我会使用on
,但我更倾向于利用listenTo
方法。
谢谢!
更新:
请参阅下面的答案,了解有关此问题情况的其他信息......
答案 0 :(得分:1)
好吧,我弄清楚问题是什么(某种程度上)并且我不确定这个问题是否应该被关闭......但是我认为如果有人遇到同样问题并且没有关闭,我会分享这个问题。
在原始视图的子视图中,我有一个类似于以下内容的事件哈希:
// ...in subview definition
events: {
'keyup input': 'changeAttr'
},
changeAttr: function(){
var value = this.$('input').val();
this.model.set('attr', value); // this.model is in the collection
}
通过此设置,这工作正常:
// inside parent_view:
initialize: function() {
this.collection.on('change:attr', function(){ alert("changed") });
}
......但这失败了:
initialize: function() {
this.listenTo('change:attr', function() { alert("changed") });
}
我没有提到的是我使用jQuery在子视图上模拟'keyup'事件,例如。 $('input').trigger('keyup')
(这是出于自动化测试目的)。由于某种原因,我不太清楚,Backbone不喜欢这个。更奇怪的是,该属性实际上会改变!因此上面的on
方法工作......也许有人在那里可以向我解释为什么会出现这种情况(也许缺少keyup事件的某些属性而listenTo不喜欢它?)