删除集合中的模型并触发删除事件 - backbone.js

Hel*_*rld 18 javascript backbone.js

如何删除集合中的模型并使remove事件触发.我试过 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());
Run Code Online (Sandbox Code Playgroud)

Ben*_*ser 37

对于其他寻找删除位置的人,您可以使用collection.where调用链接它.像这样删除与搜索匹配的所有项目:

people.remove(people.where({name: "joe3"}));
Run Code Online (Sandbox Code Playgroud)

请参阅Backbone collection.where

  • imo,最好的答案 (3认同)

dfs*_*fsq 35

通过做:

people.remove([{ name: "joe3" }]);
Run Code Online (Sandbox Code Playgroud)

您不删除模型,因为您只传递一个未连接到people集合的普通对象.相反,你可以做这样的事情:

people.remove(people.at(2));
Run Code Online (Sandbox Code Playgroud)

要么:

var model = new Person({name: "joe3"});
people.add(model);
...
people.remove(model);
Run Code Online (Sandbox Code Playgroud)

也会奏效.

所以你需要从集合中引用实际的模型对象;

http://jsfiddle.net/kD9Xu/

  • model.get( '时代') (3认同)

Igo*_*bin 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());
Run Code Online (Sandbox Code Playgroud)


sta*_*ovs 5

另一种方法是短一些,并触发集合的remove事件:

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

触发“消灭”事件的模型,这将泡了通过包含它的所有集合.. http://backbonejs.org/#Model-destroy