comment puis-je supprimer supprimer un modèle de la collection et activer l'événement remove? J'ai essayé people.remove([{ name: "joe3" }]);
mais ça ne marchera pas.
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());
En faisant:
people.remove([{ name: "joe3" }]);
vous ne supprimez pas un modèle, car vous ne faites que passer un objet simple qui n'est pas connecté à la collection people
. Au lieu de cela, vous pouvez faire quelque chose comme ceci:
people.remove(people.at(2));
Ou:
var model = new Person({name: "joe3"});
people.add(model);
...
people.remove(model);
fonctionnera aussi bien.
Vous devez donc référencer un objet de modèle réel dans une collection.
Pour ceux qui recherchent une suppression, vous pouvez simplement la chaîner avec un appel collection.where comme si de supprimer tous les éléments correspondant à la recherche:
people.remove(people.where({name: "joe3"}));
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());
Un autre moyen est un peu plus court et déclenche également l'événement remove pour une collection:
people.at(2).destroy();
// OR
people.where({name: "joe2"})[0].destroy();
Déclenche un événement "destroy" sur le modèle, qui se répercutera sur toutes les collections le contenant. http://backbonejs.org/#Model-destroy
Pour supprimer "[0]", vous pouvez utiliser le code suivant:
people.findWhere({name: "joe2"}).destroy();