Программно обновляем веб-дату
Я использую HTML5 <input type="date">
с нокаутом Я использую webshim для браузеров, которые не поддерживают даты html5.
Нативные HTML5-браузеры работают отлично, изменение даты меняет модель, изменение модели программно изменяет дату, отображаемую при вводе даты.
Изменение даты в браузере, который не поддерживает html5 (например, IE8), работает правильно и обновляет модель нокаута, но обратное неверно. Изменения в модели не распространяются на сгенерированный веб-сборщиком даты, а только на скрытый ввод, который использует веб-сайт.
Существует ли какой-либо веб-метод или событие, которые я могу вызвать или вызвать, чтобы сообщить им о необходимости просмотра данных и обновления пользовательского интерфейса после изменения? Как я мог написать нокаут, связывающий это?
1 ответ
Оказывается, webshim требует, чтобы вы использовали jQuery(). Val() для обновления даты, а не использовали DOM напрямую. Я смог написать привязку нокаута, которая сделала это, расширив привязку нормального значения:
ko.bindingHandlers.date = $.extend({}, ko.bindingHandlers.value);
ko.bindingHandlers.date.update = function(element, valueAccessor) {
// Set value using jQuery val method as this is caught internally by webshim
$(element).val(valueAccessor()());
};
Тогда я мог бы использовать:
<input type="date" data-bind="'date': date">
как и следовало ожидать.