0

我正在尝试将项目添加到集合中,但首先我想删除现有的项目。只有一个项目将永远存在。我可以创建一个新的,但不能删除一个。也许我在倒退。

这是我的收藏,changetheme 是被调用的函数,它可以解决,但无法弄清楚如何删除现有的。this.model.destroy() 只是抛出一个错误。也许我脱离了上下文。

bb.model.Settings = Backbone.Collection.extend(_.extend({
    model:  bb.model.Setting,
    localStorage: new Store("rrr"),

    initialize: function() {
        var self = this
        this.model.bind('add', this.added, this);
    },
    changetheme: function(value) {
        var self = this
        this.destroy();
        this.create({theme:value});
    },
}));

如果重要的话,这就是我的模型

bb.model.Setting = Backbone.Model.extend(_.extend({
    defaults: {
        theme: 'e'
    },
    initialize: function() {
        var self = this;
    },
    added: function(item) {
        var self = this;
        this.destroy(); 
    },
}));
4

1 回答 1

1

要从您可以调用的集合中删除第一项,您collection.shift()也可以通过调用来清除集合collection.reset()。所以在你的情况下,你可以写:

changetheme: function(value) {
    this.shift();
    this.create({theme:value});
}

UPD 好的,让我解释一下-在您的示例中,localStorage 的播放方式与任何其他服务器端一样。因此,当您调用“创建”时,根据文档主干实例化具有属性哈希的模型,将其保存到服务器(localStorage),并在成功创建后添加到集合中。这就是为什么您的收藏品数量在每次页面刷新时都会增加。但是,当您调用shift/remove docs时,只有您的客户端集合受到影响,而不是服务器(localStorage)。现在,从服务器和客户端删除模型的最佳选择是调用模型的销毁方法,如下所示:

changetheme: function(value) {
    var modelToDelete = this.at(0) //take first model
    modelToDelete.destroy();
    this.create({theme:value});
}
于 2012-10-31T09:37:32.827 回答