簡體   English   中英

刪除集合中的模型並觸發刪除事件 - backbone.js

[英]remove model in collection and fire remove event - 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());

對於其他尋找刪除位置的人,您可以使用collection.where調用鏈接它。 像這樣刪除與搜索匹配的所有項目:

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

請參閱Backbone collection.where

通過做:

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/

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());

另一種方法是縮短一點,並為集合觸發remove事件:

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

觸發模型上的“destroy”事件,該事件將通過包含它的任何集合冒泡.http://backbonejs.org/#Model-destroy

要刪除“[0]”,您可以使用以下代碼:

people.findWhere({name: "joe2"}).destroy();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM