【发布时间】:2014-04-10 15:02:11
【问题描述】:
目前我正在使用淘汰赛 2.1.0,其中以下 datepicker 绑定非常适合不可观察的值。当我更新淘汰赛 3.0 时,它无法正常工作
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor) {
// Get the options from the binding.
var options = allBindingsAccessor().datepickerOptions || {};
$(element)
.datepicker(options)
.bind("change", function() {
ko.bindingHandlers.datepicker.updateValue(element, valueAccessor, allBindingsAccessor);
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).datepicker("destroy");
});
},
update: function(element, valueAccessor, allBindingsAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
// If the date is coming from a Microsoft webservice.
if (typeof value === "string" && value.indexOf('/Date(') === 0) {
value = new Date(parseInt(value.replace(/\/Date\((.*?)\)\//gi, "$1")));
}
var currentDate = $(element).datepicker("getDate");
// Check if the date has changed.
if (value && value - currentDate !== 0) {
$(element).datepicker("setDate", value);
}
},
updateValue: function(element, valueAccessor, allBindingsAccessor) {
var observable = valueAccessor(),
dateValue = $(element).datepicker("getDate");
// Two-way-binding means a writeable observable.
if (ko.isWriteableObservable(observable)) {
observable(dateValue);
return;
}
if (allBindingsAccessor()._ko_property_writers) {
allBindingsAccessor()._ko_property_writers.datepicker(dateValue);
}
}
};
当我调试代码时,我知道allBindingsAccessor()._ko_property_writers 是未定义的。因为我无法更新不可观察的值。
谁能给我建议3.0版本的上述代码的解决方案
通过使用下面的示例,我修改了我的自定义绑定,它工作得很好。请找到更新的小提琴
【问题讨论】:
标签: jquery knockout.js datepicker knockout-2.0 knockout-3.0