How to force a view refresh without having it trigger automatically from an observable?
knockout.jsknockout.js Problem Overview
Note: this is mostly for debugging and understanding KnockoutJS.
Is there a way to explicitly request Knockout to refresh the view from (already bound) view model? I am looking for something like:
ko.refreshView();
I understand that this is not an intended use of Knockout, but I still want to know if there is a such method for debugging and learning purposes.
knockout.js Solutions
Solution 1 - knockout.js
You can't call something on the entire viewModel, but on an individual observable you can call myObservable.valueHasMutated()
to notify subscribers that they should re-evaluate. This is generally not necessary in KO, as you mentioned.
Solution 2 - knockout.js
In some circumstances it might be useful to simply remove the bindings and then re-apply:
ko.cleanNode(document.getElementById(element_id))
ko.applyBindings(viewModel, document.getElementById(element_id))
Solution 3 - knockout.js
I have created a JSFiddle with my bindHTML knockout binding handler here: https://jsfiddle.net/glaivier/9859uq8t/
First, save the binding handler into its own (or a common) file and include after Knockout.
If you use this switch your bindings to this:
<div data-bind="bindHTML: htmlValue"></div>
OR
<!-- ko bindHTML: htmlValue --><!-- /ko -->