我使用一个
jQuery UI日期。它后面的HTML输入字段目前被连接到
KnockoutJS作为dependentObservable,但是当它的值设置在viewmodel中时,datepicker失去它的格式。
解决方法
您可以编写一个自定义绑定,使用datepicker API在字段中设置日期,并通过正确读取日期来设置observable的值。
自定义绑定可能如下所示:
ko.bindingHandlers.datepicker = { init: function(element,valueAccessor,allBindingsAccessor) { var options = allBindingsAccessor().datepickerOptions || {},$el = $(element); //initialize datepicker with some optional options $el.datepicker(options); //handle the field changing ko.utils.registerEventHandler(element,"change",function() { var observable = valueAccessor(); observable($el.datepicker("getDate")); }); //handle disposal (if KO removes by the template binding) ko.utils.domNodeDisposal.addDisposeCallback(element,function() { $el.datepicker("destroy"); }); },update: function(element,valueAccessor) { var value = ko.utils.unwrapObservable(valueAccessor()),$el = $(element),current = $el.datepicker("getDate"); if (value - current !== 0) { $el.datepicker("setDate",value); } } };
你会使用它像:
<input data-bind="datepicker: myDate,datepickerOptions: { minDate: new Date() }" />
datepickeroptions是可选的,可以包括任何你想传递到datepicker()调用。
此外,这假设您正在使用可见的日期。如果你想做一个非可观察的单向绑定,绑定必须多做一些工作,但这是不可能的。