2012-02-09 2 views
1

http://jsfiddle.net/AYPze/9/Нокаут Js: The "с" связывающими перерывов JQuery UI

В этом примере у меня есть два подобных дивы с той же целью. Свяжите выбранную дату с datetimepicker и сохраните ее на объект, привязанный к нокауту js.

Проблема с первым div заключается в том, что datetimepicker не будет отображаться, потому что я использую нокаут «со связью».

Второй div использует стандартный синтаксис связывания jcoutout, который отлично работает с datetimepicker.

Я испытал это поведение и с Jquery-щий аккордеоном

Моими вопросы: Является ли это ошибка в нокауте или Jquery-интерфейсе? Есть ли работа вокруг, поэтому я могу использовать привязку «с»?

+1

возможно дубликат [Нокаут с Jquery UI DatePicker] (http://stackoverflow.com/questions/6612705/knockout-with-jquery- ui-datepicker) см. также: https://github.com/SteveSanderson/knockout/issues/239 – fyr

ответ

3

Ваша проблема связана с с привязкой, но не так, как вы думаете.

Проблема заключается в том, что привязка с привязкой в этом случае удалит jQuery datepicker из элемента DOM, и поэтому вы не видите датепика для первого текстового поля.

Основная проблема заключается в том, что вы нарушаете очень важное правило при работе с Knockout и DOM. Вы не должны напрямую обращаться к DOM с помощью jQuery, как сейчас. Вы должны использовать bindHandler для устранения разрыва между вашей моделью данных и моделью DOM.

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

Вот обновленная версия вашей скрипкой с рабочим DatePicker: http://jsfiddle.net/AYPze/10/

+0

благодарит Mikael за сообщение. Пользовательские привязки действительно велики. Заблокируйте мое решение в http://jsfiddle.net/AYPze/12/ Я использую пользовательскую привязку «datepicker», чтобы установить конфигурацию datepicker и по-прежнему использовать привязку «значение» для значений. – Henk

+0

Извините, что подобрал такую ​​старую нить, но это, похоже, объясняет именно ту проблему, которую я тоже испытываю. Я очень новичок в мире нокаутов, и на самом деле я просто настраиваю код, написанный кем-то другим, который использует Knockout. Рассмотрев ваш пример jsfiddle (который я действительно не соблюдаю), я не могу задаться вопросом, стоит ли все это дополнительное усложнение. Используя jQuery, я могу анимировать элемент с одной строкой кода. Это красота jQuery. Теперь, с Knockout, кажется, что это может занять дюжину строк, если мне нужно использовать bindHandler и так далее. –

+0

Понятно, что мое решение устарело и не рекомендовало бы его использовать. Затем, об использовании jQuery напрямую будет выглядеть так, как будто он имеет желаемый эффект, но это не так. В любом случае, вместе с Нокаутом. Причина в том, что у Knockout есть совершенно другая концепция о том, как обращаться с данными и как эти данные привязаны к представлению (и что данные и презентация разделены). Вам нужно понять эту концепцию и рассуждения позади нее, чтобы понять «Нокаут». –

Смежные вопросы