18

コレクション内のモデルを削除して削除し、削除イベントを発生させるにはどうすればよいですか。試し people.remove([{ name: "joe3" }]);ましたが、うまくいきません。

var Person = Backbone.Model.extend({

    initialize: function () {
        console.log(" person is initialized");
    },
    defaults: {
        name: "underfined",
        age:"underfined"
    }
});

var People = Backbone.Collection.extend({
    initialize: function () {
        console.log("people collection is initialized");
        this.bind('add', this.onModelAdded, this);
        this.bind('remove', this.onModelRemoved, this);
    },
    model: Person,
    onModelAdded: function(model, collection, options) {
        console.log("options = ", options);
        alert("added");
    },
    onModelRemoved: function (model, collection, options) {
        console.log("options = ", options);
        alert("removed");
    },
});

//var person = new Person({ name: "joe1" });
var people = new People();



//people.add([{ name: "joe2" }]);
people.add([{ name: "joe1" }]);
people.add([{ name: "joe2" }]);
people.add([{ name: "joe3" }]);
people.add([{ name: "joe4" }]);
people.add([{ name: "joe5" }]);

people.remove([{ name: "joe3" }]);



console.log(people.toJSON());
4

5 に答える 5

38

どこから削除するかを探している他の人は、collection.where呼び出しでチェーンするだけです。検索に一致するすべてのアイテムを削除するには、次のようにします。

people.remove(people.where({name: "joe3"}));

バックボーンコレクションを参照してください。

于 2014-10-01T06:04:43.360 に答える
37

行うことによって:

people.remove([{ name: "joe3" }]);

peopleコレクションに接続されていないプレーンオブジェクトのみを渡すため、モデルを削除しません。代わりに、次のようなことを行うことができます。

people.remove(people.at(2));

または:

var model = new Person({name: "joe3"});
people.add(model);
...
people.remove(model);

同様に動作します。

したがって、コレクションから実際のモデルオブジェクトを参照する必要があります。

http://jsfiddle.net/kD9Xu/

于 2013-02-25T13:56:15.857 に答える
5
var Person = Backbone.Model.extend({
    defaults: {
        name: "underfined",
        age:"underfined"
    }
});

var People = Backbone.Collection.extend({
    initialize: function () {
        this.bind('remove', this.onModelRemoved, this);
    },
    model: Person,
    onModelRemoved: function (model, collection, options) {
        alert("removed");
    },
    getByName: function(name){
       return this.filter(function(val) {
          return val.get("name") === name;
        })
    }
});

var people = new People();

people.add(new Person({name:"joe1"}));
people.add(new Person({name:"joe2"}));
people.remove(people.getByName("joe1"));

console.info(people.toJSON());
于 2013-02-25T14:11:14.590 に答える
5

もう1つの方法は少し短く、コレクションの削除イベントも発生させます。

people.at(2).destroy();
// OR
people.where({name: "joe2"})[0].destroy();

モデルで「破棄」イベントをトリガーします。これは、モデルを含むすべてのコレクションを介してバブルします。http://backbonejs.org/#Model-destroy

于 2015-04-27T14:18:47.367 に答える
0

「[0]」を削除するには、次のコードを使用できます。

people.findWhere({name: "joe2"}).destroy();
于 2016-01-02T15:31:44.747 に答える