Jquery 敲除中的日期选择器绑定

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

我正在尝试将JQuery的datepicker与使用BindingHandler的knockout结合使用。当我点击文本框时,它会显示日期选择器。但基础模型并未更新

==脚本

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
,但是如果您觉得合适,可以删除它

希望有帮助