我有以下View
:
var PageView = Backbone.View.extend({
model: Models.MyModel,
initialize: function () {
this.state = window.state;
this.state.on("change", this.render, this);
},
render: function () {
}
});
state
是另一个Model
,它将包含不同的全局设置,例如:pageNumber,pageSize等。
所以我的问题是:是否可以将this.state.on("change", this.render, this);
改为:
this.state.on("change:pageNumber=2", this.render, this);
即。更改this.render
后将执行state
,且仅当pageNumber
属性等于2
时才会执行if
。
我知道我可以将render
语句放入{{1}}方法,但如果有办法如上所述,那就更大了。
感谢。
答案 0 :(得分:2)
Backbone不提供事件的过滤机制,但您可以更改状态模型以使用您希望的签名触发自定义事件。
例如,假设state
是此类的实例
var EqualBindModel = Backbone.Model.extend({
arm: function(attribute, watchvalue) {
this.on('change:'+attribute, function(model, val, options) {
if (watchvalue === val)
model.trigger('change:'+attribute+'='+val, model, val, options);
});
}
});
然后您可以使用
设置自定义事件var state = new EqualBindModel();
state.arm('pageNumber', 2);
并听取
state.on("change:pageNumber=2", function(model, value, options) {
console.log('event change:pageNumber=2');
});