【问题标题】:How to remove a backbone model from only one collection如何仅从一个集合中删除主干模型
【发布时间】:2014-10-07 17:42:53
【问题描述】:

我们遇到了 Backbone 的一个基本问题:如果我将相同的模型添加到集合 A 和 B A.add()B.add(),然后我使用 A.remove() 从集合 A 中删除它,则会触发删除事件在集合 B 听到的模型上,因此该模型也从集合 B 中删除。是否有解决此默认行为的首选方法?我们是否必须在每次操作这些集合时都指定{silent: true},还是有更好的方法?

谢谢, -mykle-

【问题讨论】:

  • 您能否阐明“模型也从集合 B 中删除” 的含义?您的 "remove" 事件侦听器是从集合 B 中删除模型还是自动删除模型(无需您的操作)?

标签: javascript backbone.js


【解决方案1】:

您需要在初始化模型时覆盖模型上的更改方法。

Ship = Backbone.Model.extend({
    defaults: {
        name:'titanic',
        cas: new Array()
    },
    initialize: function() {
        this.on('change:cas', this.notify, this);
        this.on('change', this.notify, this);
    },
    notify: function() {
        console.log('cas changed');
    },
    notifyGeneral: function() {
        console.log('general change');
    }
});

这是具有两个更改事件的模型的一个很好的示例。您将需要检查模型的集合名称并相应更改或不更改。在这里,您可能会这样做:

initialize: function() {
    this.on('change', this.notify, this);
},
notify: function() {

    console.log('cas changed');
    if(this.collection.id = 'CollectionB'){
       return true;
    }else{
       return false;
    }
}

这是一个很好的参考:

Backbone.js : change not firing on model.change()

【讨论】:

    猜你喜欢
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2015-05-30
    相关资源
    最近更新 更多