当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 来自Collection的Backbone remove()

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有一个集合,我没有运气从它删除一个特定的模型. 使用fetch()从服务器中提取集合,然后使用数据填充视图.该集合只包含一个id列表.获取后,集合看起来像这样: d {**length: 9**, models: Ar
我有一个集合,我没有运气从它删除一个特定的模型.

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

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

这不是Collection #remove的工作方式.从 fine manual:

remove collection.remove(models, [options])

Remove a model (or an array of models) from the collection.

这是一个对象:

{_id: data._id}

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

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);
网友评论