Jquery 敲除中的日期选择器绑定
我正在尝试将JQuery的datepicker与使用BindingHandler的knockout结合使用。当我点击文本框时,它会显示日期选择器。但基础模型并未更新 ==脚本Jquery 敲除中的日期选择器绑定,jquery,knockout.js,binding,datepicker,jquery-ui-datepicker,Jquery,Knockout.js,Binding,Datepicker,Jquery Ui Datepicker,我正在尝试将JQuery的datepicker与使用BindingHandler的knockout结合使用。当我点击文本框时,它会显示日期选择器。但基础模型并未更新 ==脚本 ko.bindingHandlers.dtp = { init: function (element, valueAccessor, allBindingsAccessor) { allBindings = allBindingsAccessor(); $(element).date
ko.bindingHandlers.dtp = {
init: function (element, valueAccessor, allBindingsAccessor) {
allBindings = allBindingsAccessor();
$(element).datepicker({
dateFormat: 'dd-mm-yy',
changeMonth: true,
changeYear: true,
onSelect: function (evntObj) {
$(element).datepicker("hide");
valueAccessor($(element).val());
}
});
}
}
function Member(item) {
var self = this;
self.JoinDate = ko.observable(item.JoinDate);
}
var viewmodel = function () {
self = this;
self.members = ko.observableArray([]);
}
var moView = new viewmodel();
moView.push(new Member({JoinDate:"10-10-2010"}))
moView.push(new Member({JoinDate:"11-11-2011"}))
ko.applyBindings(moView);
==HTML
<table data-bind='foreach: members()'>
<tr><td><input type="text" data-bind=" value: JoinDate, dtp:{}" /></td></tr>
</table>
在JSFIDLE中进行模拟时,似乎会出现其他问题我通过将
新成员
push
调用移动到您的视图模型
中,修复了您的JavaScript错误
我还根据这里找到的一些代码实现了一个解决方案:这看起来就是您所追求的行为
更新的绑定:
ko.bindingHandlers.dtp = {
init: function(element, valueAccessor, allBindingsAccessor) {
//initialize datepicker with some optional options
var options = allBindingsAccessor().dtpOptions || {};
$(element).datepicker(options);
//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);
}
}
};
我已经相应地更新了你的代码。另外,我总是喜欢在处理日期时使用Moment.js
,但是如果您觉得合适,可以删除它
希望有帮助