Программно обновляем веб-дату

Я использую 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">

как и следовало ожидать.

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