Как принудительно обновить представление, не запустив его автоматически из наблюдаемого?
Примечание: это в основном для отладки и понимания KnockoutJS.
Есть ли способ явно запросить нокаут, чтобы обновить представление из (уже привязанной) модели представления? Я ищу что-то вроде:
ko.refreshView();
Я понимаю, что это не намеренное использование Knockout, но я все еще хочу знать, есть ли такой метод для отладки и обучения.
Ответы
Ответ 1
Вы не можете вызвать что-то на всей модели viewModel, но на индивидуальном наблюдаемом вы можете позвонить myObservable.valueHasMutated()
, чтобы уведомить подписчиков о необходимости их переоценки. Это, как вы упомянули, обычно не требуется в KO.
Ответ 2
В некоторых случаях может быть полезно просто удалить привязки, а затем повторно применить:
ko.cleanNode(document.getElementById(element_id))
ko.applyBindings(viewModel, document.getElementById(element_id))
Ответ 3
Я создал JSFiddle с моим обработчиком привязки нокаута bindHTML здесь:
https://jsfiddle.net/glaivier/9859uq8t/
Сначала сохраните обработчик привязки в свой собственный (или общий) файл и включите после нокаута.
Если вы используете этот переключатель, ваши привязки к этому:
<div data-bind="bindHTML: htmlValue"></div>
OR
<!-- ko bindHTML: htmlValue --><!-- /ko -->