複数のビュー モデルで構成される SPA にノックアウトを使用しています。どのビューを表示するかを処理するために、「サブ」ビュー モデルを bindings でバインドする div をラップしました。
私たちが目にしている問題は、ビューの可視性が切り替えられると、その中のカスタム バインディングが毎回実行され、初期化と更新の両方が行われることです。
これは、このjqdialog バインディングに基づくバインディングがあり、init ごとに新しいダイアログが作成されて DOM に追加されるときに問題を引き起こしますが、それをいつ削除する必要があるかを知る簡単な方法はありません。
多かれ少なかれ、アーキテクチャのこの部分を再配置する必要があるかどうか、またはバインディングに何かが欠けているかどうかが問題です。
単純なビュー:
<div id="view">
<button data-bind="click: on">On</button>
<button data-bind="click: off">Off</button>
<div data-bind="with: visible">
<span data-bind="foo: ''">foo</span>
visible
</div>
</div>
J:
ko.bindingHandlers.foo= {
init: function() {
alert("init");
},
update: function() {
alert("update");
}
}
var vm =(function() {
var self = this;
self.visible = ko.observable(false);
self.on = function() { self.visible(true); };
self.off= function() {self.visible(false); };
})();
ko.applyBindings(vm, document.getElementById("view"));
</p>
エラーを大まかに示す小さなフィドル。