Как заставить обновление представления, не вызывая его автоматически из наблюдаемой?

Примечание: это в основном для отладки и понимания KnockoutJS.

Есть ли способ явно запросить Knockout для обновления представления из (уже связанной) модели представления? Я ищу что-то вроде:

ko.refreshView();

Я понимаю, что это не предполагаемое использование Knockout, но я все еще хочу знать, существует ли такой метод для целей отладки и обучения.

4 ответа

Решение

Вы не можете вызвать что-то для всей модели viewModel, но для отдельной наблюдаемой вы можете вызвать myObservable.valueHasMutated() уведомить подписчиков, что они должны переоценить. Как вы упомянули, в KO это обычно не требуется.

В некоторых случаях может быть полезно просто удалить привязки, а затем повторно применить:

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

Я создал JSFiddle с моим обработчиком привязки нокаута bindHTML здесь: https://jsfiddle.net/glaivier/9859uq8t/

Сначала сохраните обработчик привязки в свой собственный (или общий) файл и включите его после Knockout.

Если вы используете это, переключите ваши привязки на это:

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

OR

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

Простая альтернатива - очистить наблюдаемый массив:

      let tmp = myObservableArray();
myObservableArray([]);
myObservableArray(tmp);

Примечание. Эта альтернатива может пострадать в производительности.

Другие вопросы по тегам