2012-05-09 3 views
2

У меня есть вопрос, основанный на данных, связывание с нокаутом и Jquery DatePicker из jQuery UI datepicker change event not caught by KnockoutJSJavascript с JQuery DatePicker с помощью нокаута

Это прекрасно работает и хорошо до тех пор, как DateFormat является дд-мм-гггг. Как только я изменил свой формат даты на MM-yy, привязка данных больше не обновляется. Дата вместо этого установлена ​​на сегодняшнюю дату, независимо от того, что я выбираю в списке. Любые советы о том, как я могу это сделать? У меня несколько элементов управления на нескольких уровнях, поэтому я бы предпочел не использовать это решение: Knockout with Jquery UI datepicker, MM/YY only

Заранее спасибо.

Javascript:

ko.bindingHandlers.datepicker = { 
    init: function (element, valueAccessor, allBindingsAccessor) { 
     $(element).datepicker({ 
      dateFormat: "dd-mm-yy", 
      //dateFormat: "MM-yy", 
      changeYear: true, 
      changeMonth: true 
     }); 

     //handle the field changing 
     ko.utils.registerEventHandler(element, "change", function() { 
      var observable = valueAccessor(); 
      observable($(element).datepicker("getDate")); 
     }); 

     //handle disposal (if KO removes by the template binding) 
     ko.utils.domNodeDisposal.addDisposeCallback(element, function() { 
      $(element).datepicker("destroy"); 
     }); 

    }, 
    update: function (element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()), 
      current = $(element).datepicker("getDate"); 

     if (value - current !== 0) { 
      $(element).datepicker("setDate", value); 
     } 
    } 
}; 

HTML:

<td><input class="dateField" data-bind="datepicker: plannedStartDate" /></td> 

ViewModel:

... 
self.plannedStartDate = ko.observable(); 
... 

ответ

0

Это кажется, что это ошибка с Jquery DatePicker. Всякий раз, когда этот формат используется, getDate не возвращает правильное значение.

У меня есть частичное решение, которое может работать для вас, что воссоздает решение, указанное в вашей ссылке.

http://jsfiddle.net/madcapnmckay/tKxAT/

Он использует datejs разобрать datetext возвращаясь из DatePicker. Не очень хорошо, поскольку информация дня потеряна, но зависит от того, хотите ли вы этого. Если нет, я предлагаю вам, возможно, придется найти другого datepicker или изменить формат, чтобы включить дату.

Надеюсь, это поможет.

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