骨干绑定事件到模型。如果值等于参数,则绑定

时间:2014-05-08 09:45:05

标签: javascript backbone.js backbone-events


我有以下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}}方法,但如果有办法如上所述,那就更大了。

感谢。

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');
});

演示http://jsfiddle.net/ZCab8/1/