2

KnockoutJS でキャッチされない jQuery UI の datepicker 変更イベントからのノックアウトと jquery datepicker を使用したデータ バインディングに基づいて質問があります。

これは、日付形式が dd-mm-yy である限り、正常に機能します。dateform at を MM-yy に変更するとすぐに、データ バインディングは更新されなくなります。リストボックスで何を選択しても、日付は今日の日付に設定されます。これを機能させる方法に関するヒントはありますか?私は複数のレベルで複数のコントロールを持っているので、このソリューションを使用したくないと思います: Jquery UI datepicker を使用した Knockout、MM/YY のみ

前もって感謝します。

Javascript:

ko.bindingHandlers.datepicker = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        $(element).datepicker({
            dateFormat: "dd-mm-yy",
            //dateFormat: "MM-yy",
            changeYear: true,
            changeMonth: true
        });

        //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);
        }
    }
};

html:

 <td><input class="dateField" data-bind="datepicker: plannedStartDate" /></td>

ビューモデル:

...
self.plannedStartDate = ko.observable();
...
4

1 に答える 1

0

これは、jquery datepicker のバグのようです。その形式が使用されるたびに、getDate は正しい値を返しません。

リンクで指定したソリューションを再現する部分的なソリューションがあります。

http://jsfiddle.net/madcapnmckay/tKxAT/

datejs を使用して、datepicker から返される datetext を解析します。当日の情報が失われるため、あまり良くありませんが、それが必要かどうかによって異なります。そうでない場合は、別の日付ピッカーを見つけるか、形式を変更して日付を含める必要があることをお勧めします。

お役に立てれば。

于 2012-05-09T16:18:48.257 に答える