0

Backbone Relational を使用して小さなモデルのペアをセットアップしようとしていますが、remove イベントがどのように発生するかわかりません。

これが私のモデルコードです:

var Car = Backbone.RelationalModel.extend({
    idAttribute: "id"
});

var Cars = Backbone.Collection.extend({
    model: Car
});

var CarCollection = new Cars();

var User = Backbone.RelationalModel.extend({

    idAttribute: 'id',
    relations: [{
        type: Backbone.HasMany,
        key: 'model',
        relatedModel: Car,
        collectionType: Cars,
        includeInJSON: 'model',
        reverseRelation: {
            key: 'ownedBy',
            includeinJSON: 'name'
        }
    }]

  });

var Users = Backbone.Collection.extend({
    model: User
});

var UserCollection = new Users();

//Bootstrap data and put it in the collections

var carsData = [
    {id:1, model:'500',ownedBy:1},
    {id:2, model:'Corsa',ownedBy:2},
    {id:3, model:'Civic',ownedBy:2}
];

var usersData = [
    {id:1,name:'Dude'},
    {id:2,name:'Mark'}
];

CarCollection.add(carsData);
UserCollection.add(usersData);

JSONで得られるのは次のとおりです。

UserCollection = {"id":1,"name":"Dude","model":["500"]}{"id":2,"name":"Mark","model":["Corsa","Civic"]}

CarCollection = {"id":1,"model":"500","ownedBy":"Dude"}{"id":2,"model":"Corsa","ownedBy":"Mark"}{"id":3,"model":"Civic","ownedBy":"Mark"}

次のように CarCollection に要素を追加すると:

CarCollection.add({id:4,model:'Prius',ownedBy:1};);

「追加」イベントが発生しますが、コレクションから 1 つの要素を削除すると:

var el = CarCollection.get(1);
CarCollection.remove(el);

イベントは発生しません。

次のようないくつかの回避策で解決しました。

var el = CarCollection.get(1);
el.destroy();

または、Backbone.store で直接登録解除します。

Backbone.Relational.store.unregister(el);

または単に ownBy を null に設定する:

var el = CarCollection.get(1);
el.set("ownedBy",null);

これはプラグインの正しい動作ですか? または、モデルを間違った方法で構成しましたか? すべての回答に感謝します。

4

1 に答える 1

0

removeインデックスではなくモデルを渡す必要があります

Collection.remove(model)

次のことができます。

CarCollection.remove(CarCollection.at(0));

インデックス 0 または ... のモデルを削除するには

CarCollection.remove(CarCollection.get(4));

ID 4 のモデルを削除するには

于 2012-12-18T14:07:59.340 に答える