2

KnockoutJSでキャッチされないjQueryUIdatepicker changeイベントを参照して、datetimepickerをノックアウトで機能させています。だから私は基本的に次のコードを作るために置き換えdatepickerましたdatetimepicker

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() }" />

コードでは、機能しているように見えましたが、ユーザーが変更したものを対応するノックアウトオブザーバブルに更新できませんでした。

コードをデバッグしたところ、

  1. datetimepicker("getDate")時間00:00の日付部分のみを提供します。
  2. observable($(element).datetimepicker("getDate"));observable(x)が存在しない場合があるため、時々例外をスローします。

この問題を解決した人はいますか?

更新:#2は、時折発生する例外をキャッチすることで解決されました。

4

1 に答える 1

1

最近のバージョンのjQueryUIを使用してみてください。フィドルをより最近のjQuery/jQuery UIに更新するまで、あなたと同じ動作が見られました。

これが最新のビットのフィドルです:http://jsfiddle.net/rniemeyer/MWHNg

于 2012-08-31T13:08:30.143 に答える