web-dev-qa-db-ja.com

オブザーバブルから自動的にトリガーせずにビューを強制的に更新するにはどうすればよいですか?

注:これは主にKnockoutJSのデバッグと理解を目的としています。

(すでにバインドされている)ビューモデルからビューを更新するようにKnockoutを明示的に要求する方法はありますか?私は次のようなものを探しています:

ko.refreshView();

これはKnockoutの使用目的ではないことを理解していますが、デバッグや学習の目的でこのような方法があるかどうかを知りたいです。

145
THX-1138

ViewModel全体で何かを呼び出すことはできませんが、個々のobservableでmyObservable.valueHasMutated()を呼び出して、再評価する必要があることをサブスクライバに通知できます。あなたが言ったように、これは一般的にKOでは必要ありません。

244
RP Niemeyer

状況によっては、単にバインディングを削除してから再適用すると便利な場合があります。

ko.cleanNode(document.getElementById(element_id))
ko.applyBindings(viewModel, document.getElementById(element_id))
24
ProfNimrod

BindHTMLノックアウトバインディングハンドラーでJSFiddleを作成しました: https://jsfiddle.net/glaivier/9859uq8t/

まず、バインディングハンドラを独自の(または共通の)ファイルに保存し、Knockoutの後にインクルードします。

これを使用する場合、バインディングをこれに切り替えます。

<div data-bind="bindHTML: htmlValue"></div>

OR

<!-- ko bindHTML: htmlValue --><!-- /ko -->