Backbone从Collection中删除()

时间:2012-12-11 06:43:25

标签: node.js backbone.js

我有一个集合,我没有运气从中移除特定模型。

使用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});

没有任何反应,没有错误,也没有任何错误。当我记录集合时,它具有完全相同的数据。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:7)

这不是Collection#remove的工作方式。来自fine manual

  

删除 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);