ノックアウト バインディングの値を強制的に更新する方法を知りたいです。通常はオブザーバブルを使用し、オブザーバブルが変更されたときにバインディングが自動的に行われるようにします。しかし、私の場合、カスタム バインディングを作成しました。
if (!ko.bindingHandlers.asyncHtml) {
ko.bindingHandlers.asyncHtml = {
init: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
var parameters = value.params.concat([function (data) {
$(element).html(data);
} ]);
parameters.concat([function (data) {
$(element).html('Unable to retrieve html.');
} ]);
value.source.apply(null, parameters);
}
}
}
これは、非同期の JSON 呼び出しを実行する関数が、呼び出しの完了後にそれぞれの要素を (返された HTML で) 更新できるようにするためです。要素 (この場合は DIV) は次のようになります。
<div id="myDiv" data-bind="asyncHtml: {source: getHtml, params: [myId()]}">
私の問題は、このページの別の機能が、結果としてmyDivを更新する必要があるデータベースの値を変更できることです。おそらくこの問題を修正する複雑な方法を見つけることができますが、バインディングを強制的に再適用できる簡単な方法があるかどうか疑問に思っていましたか?
注: getHtml は、HTML を取得するために JSON 呼び出しを実行するビューモデルの関数です。
ありがとう