Я хотел бы знать, как я могу заставить привязку нокаута обновить его значение. Обычно мы используем наблюдаемое, и таким образом связывание может происходить автоматически, когда наблюдаемые изменения. Но в моем случае я создал пользовательское связывание:Как заставить нокаутом восстановить привязку?
if (!ko.bindingHandlers.asyncHtml) {
ko.bindingHandlers.asyncHtml = {
init: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
var parameters = value.params.concat([function (data) {
$(element).html(data);
} ]);
parameters.concat([function (data) {
$(element).html('Unable to retrieve html.');
} ]);
value.source.apply(null, parameters);
}
}
}
Это объясняется тем, что функция, которая выполняет асинхронный вызов JSON может обновить соответствующий элемент (с возвращаемым HTML) один раз завершает вызов. Элемент, DIV в этом случае выглядит следующим образом:
<div id="myDiv" data-bind="asyncHtml: {source: getHtml, params: [myId()]}">
Моя проблема заключается в том, что еще одна особенность, на этой странице можно изменить значения базы данных, которые требуют myDiv обновляться в результате. Вероятно, я могу найти сложный способ исправить эту проблему, но мне было интересно, был ли более простой способ, когда я могу просто принудительно привязать привязку?
ПРИМЕЧАНИЕ: getHtml - это функция на моей модели просмотра, которая выполняет вызов JSON для извлечения HTML.
Благодаря
Спасибо за ваш вклад, HTML будет отличаться в том смысле, что некоторые значения изменились в базе данных после загрузки html, и поэтому я хотел «обновить» html. Я посмотрю, смогу ли я найти способ использования наблюдаемого для хранения html, как вы предложили. Благодарю. –
Спасибо за предложение. Я закончил создание наблюдаемого для html. Затем в обработчике успеха для асинхронного вызова JSON я устанавливаю значение наблюдаемого. Проблема решена :) Спасибо! –