Я пытаюсь использовать KnockoutJS с jQuery UI. У меня есть элемент ввода с прикрепленным DatePicker. В данный момент я работаю, knockout.debug.1.2.1.js
и кажется, что событие change никогда не перехватывается Knockout. Элемент выглядит так:
<input type="text" class="date" data-bind="value: RedemptionExpiration"/>
Я даже пытался изменить valueUpdate
тип события, но безрезультатно. Похоже, что Chrome вызывает focus
событие непосредственно перед тем, как он меняет значение, а IE - нет.
Есть ли какой-нибудь метод нокаута, который "связывает все привязки"? Технически мне нужно только изменить значение, прежде чем я отправлю его обратно на сервер. Так что я мог бы жить с таким обходным решением.
Я думаю, что проблема в том, кто виноват, но я не могу понять, как это исправить.
Любые идеи?
источник
Вот версия ответа Р. П. Нимейера, которая будет работать со скриптами проверки нокаута, найденными здесь: http://github.com/ericmbarnard/Knockout-Validation
Изменения вносятся в обработчик событий изменений, чтобы сначала ввести введенное значение, а не дату, в сценарии проверки, а затем только установить дату для наблюдаемой, если она действительна. Я также добавил validationCore.init, который необходим для пользовательских привязок, обсуждаемых здесь:
http://github.com/ericmbarnard/Knockout-Validation/issues/69
Я также добавил предложение rpenrose для размытия изменений, чтобы избежать некоторых неприятных сценариев выбора даты, мешающих вещам.
источник
Я использовал другой подход. Поскольку похоже, что knockout.js не запускает событие при изменении, я заставил указатель даты вызывать change () для своего ввода после закрытия.
источник
Хотя все эти ответы спасли мне много работы, ни один из них не помог мне. После выбора даты связанное значение не будет обновляться. Я мог заставить его обновляться только при изменении значения даты с помощью клавиатуры и затем щелчка мышью из поля ввода. Я исправил это, дополнив код RP Niemeyer'а кодом syb, чтобы получить:
Я подозреваю, что поставил наблюдаемое ($ (element) .datepicker ("getDate")); заявление в своей собственной функции и регистрация, что с options.onSelect сделали свое дело?
источник
onSelect
функцию, она не вызоветchange
событие ...Спасибо за эту статью, я нашел это очень полезным.
Если вы хотите, чтобы DatePicker вел себя точно так же, как поведение по умолчанию в пользовательском интерфейсе JQuery, я рекомендую добавить размытие на элемент в обработчике события изменения:
т.е.
источник
Я решил эту проблему, изменив порядок моих включенных файлов скриптов:
источник
То же, что и RP Niemeyer, но лучшая поддержка WCF DateTime, Timezones и Использование свойства DatePicker onSelect JQuery.
Наслаждаться :)
http://jsfiddle.net/yechezkelbr/nUdYH/
источник
Я думаю, что это можно сделать гораздо проще:
<input data-bind="value: myDate, datepicker: myDate, datepickerOptions: {}" />
Таким образом, вам не нужна ручная обработка изменений в функции инициализации.
Но в этом случае ваша переменная 'myDate' получит только видимое значение, а не объект Date.
источник
Кроме того, вы можете указать это в привязке:
Обновить:
источник
Основываясь на решении Райана, myDate возвращает стандартную строку даты, которая не является идеальной в моем случае. Я использовал date.js для разбора значения, чтобы он всегда возвращал нужный вам формат даты. Посмотрите на этом примере скрипки примера .
источник
Мне нужно было многократно обновлять свои данные с сервера, с которым сталкивался, но не совсем закончил работу, чтобы поделиться своими потребностями ниже (мой формат даты / Дата (1224043200000) /):
После того, как модель правильно отформатирована для вывода, я добавил шаблон с документацией knockoutjs :
источник
Мало кто спрашивал о динамических опциях выбора даты. В моем случае мне был нужен динамический диапазон дат - поэтому первый вход определяет минимальное значение второго, а второй устанавливает максимальное значение для первого. Я решил это, расширив обработчик RP Niemeyer. Итак, к его оригиналу:
Я добавил еще два обработчика, соответствующих опциям, которые я хотел изменить:
И использовал их так в моем шаблоне:
источник
Использование пользовательских привязок, представленных в предыдущих ответах, не всегда возможно. Вызов
$(element).datepicker(...)
требует значительного времени, и, если у вас есть, например, несколько десятков или даже сотен элементов для вызова этого метода, вы должны сделать это «ленивым», то есть по требованию.Например, модель представления может быть инициализирована, так как
input
она вставляется в DOM, но соответствующие средства выбора даты будут инициализированы, только когда пользователь щелкнет по ним.Итак, вот мое решение:
Добавьте пользовательскую привязку, которая позволяет прикрепить произвольные данные к узлу:
Используйте связывание с attcah наблюдаемым, используемым для
input
значения:И наконец, при инициализации средства
onSelect
выбора даты, используйте его опцию:Таким образом, каждый раз, когда пользователь изменяет дату с помощью средства выбора даты, соответствующая наблюдаемая нокаут также обновляется.
источник