サム、あなたのフィドル データは複雑すぎました。質問をするときは、フィドルを関連する要素に絞り込むと、助けが得られる可能性が高くなります。ネストされた配列と削除を説明する簡単なフィドルを作成しました。
これが HTML です。remove 関数は配列のコンテキスト内にあることに注意してください。したがって、$parent
代わりにon の関数を呼び出します$root
。これにより、ルートではなく、すぐ上のコンテキストをターゲットにすることができます。
<ul data-bind="foreach: editData">
<li>
<span data-bind="text: name"></span>
<button data-bind="click: $parent.removeParent">Remove Parent</button>
...
<!-- This line is on the child context -->
<button data-bind="click: $parent.removeChild">Remove Child</button>
</ul>
親モデルはこちら。ここでの削除関数は、子を削除するためのものであることに注意してください。関数が呼び出されると、removeChild
子コンテキストから が要求され$parent
、この remove が呼び出されます。
var Parent = function(name, children) {
var self = this;
self.name = ko.observable(name);
self.children = ko.observableArray(children);
self.removeChild = function(child) {
self.children.remove(child);
};
};
あなたのフィドルは、MVVM開発の重要な側面であるモデルも使用しません。ノックアウト サイトのチュートリアルを実行して、ノックアウト アプリケーションを構築する方法をよりよく理解することを検討してください。このような問題に対処するのに役立ちます。