好的,我知道问题是什么(有点)并且不确定是否应该关闭这个问题......但我想我会分享这个以防万一有人遇到同样的问题并且它没有关闭。
在原始视图的子视图中,我有一个如下所示的事件哈希:
// ...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不喜欢那个?)