2012-05-09 67 views
2

jQuery的日期选择器我有一个基于数据绑定从jQuery UI datepicker change event not caught by KnockoutJS的Javascript使用淘汰赛

这工作得很好,并且只要还有日期格式为DD-MM-YY与基因敲除和jQuery日期选择器的问题。只要我将我的dateform更改为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> 

视图模型:

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

回答

0

这看起来就像是用jQuery日期选择器的bug。无论何时使用该格式,getDate都不会返回正确的值。

我有一个部分解决方案,可以为您工作,重新创建您在链接中指定的解决方案。

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

它使用datejs解析来从日期选择器背面的datetext。自从信息丢失以来不是很好,但这取决于你是否想要。如果没有,我建议你可能不得不寻找另一个日期选择器或改变你的格式以包含日期。

希望这会有所帮助。