destroy
モデル インスタンスの呼び出しが、それが接続されている Model.List にどのように影響するかを理解するのに苦労しています。
ドキュメントには次のように記載されています。
can.Model.List が従来の can.List よりも優れている点の 1 つは、モデルを破棄すると、モデルがそのリストにある場合、リストから自動的に削除されることです。
ただし、このコードを実行すると:
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 からは削除されないため、関連付けられたビューからも削除されません。