【问题标题】:change event in backbone relational not working骨干关系中的更改事件不起作用
【发布时间】:2014-03-14 13:18:09
【问题描述】:

我正在处理具有 HasMany 关系的骨干关系。添加事件会被触发,但更改事件不会。

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

具有 HasOne 关系的更改事件有效,但不适用于 HasMany。

【问题讨论】:

    标签: javascript backbone.js backbone-relational


    【解决方案1】:

    似乎,如果 HasMany 关系集合内的任何模型 InnerModel 发生更改,change 事件不会在外部模型 Model1 上触发。请参阅 GitHub 上 Backbone.RelationalModel 中的问题:Change events not being fired on collection change。作者关闭了这个问题,他说:

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

    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 获取您希望从它们的关系中接收所有事件的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多