3

我有一个收藏品,但我无法从中删除特定型号。

使用 fetch() 从服务器中提取集合,然后我用数据填充视图。该集合仅包含一个 ID 列表。获取后的集合如下所示:

d {**length: 9**, models: Array[9], _byId: Object, _byCid: Object, _ioEvents: Object…}
_byCid: Object
_byId: Object
_callbacks: Object
_ioEvents: Object
addRoom: function () { [native code] }
joinRoom: function () { [native code] }
length: 9
models: Array[9]
0: d
_callbacks: Object
_escapedAttributes: Object
_pending: Object
_previousAttributes: Object
_silent: Object
attributes: Object
**_id: "50c6cf36ece4f5f327000006"**
__proto__: Object
changed: Object
cid: "c3"
collection: d
__proto__: x
1: d
2: d
3: d
4: d
5: d
6: d
7: d
8: d
length: 9
__proto__: Array[0]
removeRoom: function () { [native code] }
__proto__: x

现在,当我从集合中删除模型时,我会这样做

// called from the collection class so this = collection
this.remove({_id:data._id});

什么都没有发生,没有错误,什么都没有。当我记录集合时,它具有完全相同的数据。任何帮助,将不胜感激。

4

1 回答 1

7

这不是如何Collection#remove工作的。来自精美手册

消除 collection.remove(models, [options])

从集合中删除一个模型(或模型数组)。

这是一个对象:

{_id: data._id}

不是模型。即使您没有model为您的集合指定属性,该集合仍将包含Backbone.Model实例。因此,您必须将您的模型转换data._id为模型,然后将该模型交给remove

var m = collection.where({ _id: data._id})[0];
collection.remove(m);

理想情况下,您会为您的收藏创建一个模型“类”,以便您可以设置idAttribute

var M = Backbone.Model.extend({ idAttribute: '_id' });
var C = Backbone.Collection.extend({ model: M });

然后您可以使用Collection#get以下方式查找模型_id

var m = collection.get(data._id);
collection.remove(m);
于 2012-12-11T07:20:40.340 回答