С CanJS, как автоматически удалить экземпляр модели из Model.List, когда экземпляр будет уничтожен?
Я изо всех сил пытаюсь понять, как зовет destroy
на экземпляре модели, как предполагается, влияет на Model.List, к которому он прикреплен.
В документации говорится, что:
Одно из преимуществ can.Model.List по сравнению с традиционным can.List состоит в том, что при уничтожении модели, если она находится в этом списке, она автоматически удаляется из списка.
Однако, когда я запускаю этот код:
var Todo = can.Model.extend({
destroy: function() {
console.log("Calling destroy function");
return can.Deferred();
}
},{})
Todo.bind("destroyed", function(ev, todo) {
console.log("Todo \"" + toto.name + "has been destroyed");
});
var todo1 = new Todo({ name: "Do the dishes", id: 1 });
var todo2 = new Todo({ name: "Wash floors", id: 2 });
var todos = new can.Model.List([todo1, todo2]);
todos.bind("remove", function( ev, oldVals, indx ) {
console.log("todo"+indx+" removed")
})
console.log("Before destroy I have " + todos.length + " elements");
console.log("First element is \"" + todos[0].name + "\"");
var destroyed = todos[0].destroy()
console.log("After destroy I have " + todos.length + " elements");
console.log("First element is \"" + todos[0].name + "\"");
Вот что я вижу в консоли:
Before destroy I have 2 elements
First element is "Do the dishes"
Calling destroy function
After destroy I have 2 elements
First element is "Do the dishes"
Почему элемент по-прежнему в Model.List после вызова уничтожен? Почему не destroyed
а также remove
события вызвали?
Обратите внимание, что в реальном коде я пытаюсь отладить, вызывая destroy
вызывает запрос DELETE, и объект удаляется на сервере, как и ожидалось. Однако он не удаляется из Model.List и, следовательно, ни из связанного представления.
1 ответ
Объявляя метод destroy в определении модели, вы переопределяете метод destroy по умолчанию, который заботится об удалении элемента из списка. Поэтому вам нужно удалить этот метод оттуда или вызвать super.
Вот скрипка, которая показывает эту работу http://jsbin.com/zunox/1/edit