wake-up-neo.com

Wie kann eine Ansichtsaktualisierung erzwungen werden, ohne dass sie automatisch von einem Beobachtungsobjekt ausgelöst wird?

Hinweis: Dies dient hauptsächlich zum Debuggen und Verstehen von KnockoutJS.

Gibt es eine Möglichkeit, Knockout explizit aufzufordern, die Ansicht aus dem (bereits gebundenen) Ansichtsmodell zu aktualisieren? Ich suche etwas wie:

ko.refreshView();

Ich verstehe, dass dies keine beabsichtigte Verwendung von Knockout ist, möchte aber dennoch wissen, ob es eine solche Methode zum Debuggen und Lernen gibt.

146
THX-1138

Sie können nicht für das gesamte viewModel etwas aufrufen, aber für ein einzelnes Observable können Sie myObservable.valueHasMutated() aufrufen, um die Abonnenten zu benachrichtigen, dass sie neu bewerten sollen. Dies ist in der Regel in KO nicht erforderlich, wie Sie bereits erwähnt haben.

246
RP Niemeyer

Unter bestimmten Umständen kann es nützlich sein, die Bindungen einfach zu entfernen und dann erneut anzuwenden:

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

Ich habe mit meinem bindHTML-Knockout-Bindungshandler hier eine JSFiddle erstellt: https://jsfiddle.net/glaivier/9859uq8t/

Speichern Sie zuerst den Bindungshandler in einer eigenen (oder einer allgemeinen) Datei und fügen Sie ihn nach Knockout ein.

Wenn Sie dies verwenden, ändern Sie Ihre Bindungen zu diesem:

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

OR

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