第一次使用 Backbone.js,我不确定自己这样做是否正确。
我有两个模型的两个 View ,我想使用 event aggregator方法来触发两者之间的事件。
聚合器声明:
Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events);
因此,在一个 View 中,我有一行像这样的行,它将触发 removeRow
方法。
this.eventAggregator.trigger("removeRow", this.row);
在另一个 View 中
MyView = Backbone.View.extend({
initialize: function() {
this.eventAggregator.bind("removeRow", this.removeRow);
this.model.get("rows").each(function(row) {
// Do stuff
});
},
removeRow: function(row) {
// row is passed in fine
// this.model is undefined
this.model.get("rows").remove(row);
}
});
我想我明白为什么 this.model
未定义,但是我可以做什么来维护引用,以便我可以在回调中使用 this.model
?我考虑过将模型传递到第一个 View ,然后将其传递回触发器调用中,但这似乎使事件聚合器的整个要点变得毫无意义。如果我有模型,我可以直接调用 .remove
方法,并且失去了我的第一个 View 不知道模型的好处。有什么建议吗?
最佳答案
我认为您有绑定(bind)问题。
您有两种方法可以确保this
将是View实例:
1。使用bindAll
在您的View.initialize()
中,您可以添加以下行:
_.bindAll( this, "removeRow" )
Interesting post of @DerickBailey about this matter
2。在绑定(bind)声明中使用可选的第三个参数
像这样:
this.eventAggregator.bind("removeRow", this.removeRow, this);
关于javascript - 在事件回调中获取对模型的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10820610/