2

我正在引用KnockoutJS 未捕获的 jQuery UI datepicker 更改事件,以使datetimepicker与淘汰赛一起工作。所以我基本上替换datepickerdatetimepicker制作以下代码

ko.bindingHandlers.datetimepicker = {
    init: function(element, valueAccessor, allBindingsAccessor) {   
        //initialize datetimepicker with some optional options
        var options = allBindingsAccessor().datetimepickerOptions || {};
        $(element).datetimepicker(options);

        //handle the field changing
        ko.utils.registerEventHandler(element, "change", function () {
            var observable = valueAccessor();
            observable($(element).datetimepicker("getDate"));
        });

        //handle disposal (if KO removes by the template binding)
        ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
            $(element).datetimepicker("destroy");
        });

    },
    update: function(element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());

        //handle date data coming via json from Microsoft
        if (String(value).indexOf('/Date(') == 0) {
            value = new Date(parseInt(value.replace(/\/Date\((.*?)\)\//gi, "$1")));
        }

        current = $(element).datetimepicker("getDate");

        if (value - current !== 0) {
            $(element).datetimepicker("setDate", value);
        }
    }
};

在html中:

<input data-bind="datetimepicker: myDate, datetimepickerOptions: { minDate: new Date() }" />

使用该代码,它看起来可以工作,但它无法将用户更改为相应的淘汰赛 observable 更新。

我调试了代码,发现

  1. datetimepicker("getDate")仅给出时间为 00:00 的日期部分。
  2. observable($(element).datetimepicker("getDate"));不时抛出异常,因为 observable(x) 有时不存在。

有没有人解决这个问题?

更新:#2 通过捕获偶尔的异常得到解决。

4

1 回答 1

1

您可能想尝试使用最新版本的 jQuery UI。在将小提琴更新为更新的 jQuery/jQuery UI 之前,我看到的行为与您相同。

这是最新位的小提琴:http: //jsfiddle.net/rniemeyer/MWHNg

于 2012-08-31T13:08:30.143 回答