我有一个集合,我没有运气从它删除一个特定的模型. 使用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);