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 に答える