2

以前の投稿に基づいて、datetimepicker 用に次のカスタム バインディングをセットアップしました。

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

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

        //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()),
            current = $(element).datetimepicker("getDate");

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

および動的な最小および最大日付のカスタム バインディング ハンドラー

ko.bindingHandlers.minDate = {
    update: function(element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()),
        current = $(element).datetimepicker("option", "minDate", value);
    }
};


ko.bindingHandlers.maxDate = {
    update: function(element, valueAccessor) {
    var value = ko.utils.unwrapObservable(valueAccessor()),
        current = $(element).datetimepicker("option", "maxDate", value);
    }
};

最小日付と最大日付に関して互いに制限する2つのdatetimepickerがあります。問題は、両方の datetimepicker がアクション (日付の選択またはスライダーの操作) の直後に閉じることです。マークアップから min-max ハンドラーを削除すると、問題も解決されます。これを修正する方法について何か提案はありますか? ありがとう。

4

1 に答える 1

1

開いている間に日付ピッカーの最小値と最大値を変更できるかどうかはわかりません!

いずれかの値を変更すると、おそらく観察可能な更新が起動され、datepickers の mix-max 値が強制的に更新されます。min または max の新しい値をバインディングにチェックインし、それが変更されていない場合は、datepicker の値を変更しません。

これはおそらく問題です...

于 2013-10-05T10:59:30.010 に答える