主干关系中的更改事件不工作



我正在与HasMany关系的骨干关系工作。Add事件被触发,但change事件不会。

Model1 = Backbone.RelationalModel.extend({
    urlRoot: '/Leve1/',
    initialize: function () {
        this.listenTo(this, 'add:relatedModels', this.relationModelAdd);
        this.listenTo(this, 'change:relatedModels', this.relationModelChange);
    },
    relations: [{
        type: Backbone.HasMany,
        key: 'relatedModels',
        relatedModel: 'InnerModel'
    }],
    relationModelAdd: function () {
        alert("Add in related model");
    },
    relationModelChange: function () {
        alert("Change in related model");
    }
});
InnerModel = Backbone.RelationalModel.extend({
    urlRoot: '/Level2/'         
});
var outerModel = new Model1({
    id: 'model1',
});
var innerModel = new InnerModel({
    id: 'model11',          
});
outerModel.get('relatedModels').add(innerModel);
innerModel.set({
    id: 'model13'
});

似乎,如果在HasMany关系集合内的任何模型InnerModel中发生变化,change事件不会在外部模型Model1上触发。请参阅主干中的问题。GitHub上的RelationalModel:更改事件不会在集合更改时被触发。

我不认为在默认情况下为任何关系的每次修改触发change事件是一个好主意,但是通过向Backbone.RelationalModel添加helper方法可以很容易地做到这一点,因为this._relations实际上确实为您提供了相关的模型或集合。快速的第一次尝试,你可以构建:

Backbone.RelationalModel.prototype.bindRelationEvents = function() {
    var dit = this;
    _.each( this.getRelations(), function( relation ) {
        relation.related && relation.related.bind( 'all', function() {
            dit.trigger.apply( dit, arguments );
            // Or even simply `dit.render()`, if the number of events is reasonable...
        } );
    });
};

然后调用this.bindRelationEvents对象,你想从他们的关系中接收所有事件。

相关内容

  • 没有找到相关文章