3

durandal テンプレートを使用して Web サイトで作業しています。

私は私の日付のためにこのbindingHandlersを持っています:

ko.bindingHandlers.date = {
    update: function (element, valueAccessor, allBindingsAccessor) {
        var value = valueAccessor();  // 'Mon Sep 10 2012 02:00:00 GMT+0200 (Paris, Madrid (heure d’été))'; 
        var date = moment(value());
        $(element).val((date.format('DD/MM/YYYY')));
    }
};

これが私の見解での呼び出しです:

<input type="text" class="datepicker" data-bind="date: demandDate" /> 

これは、日付を正しい形式でフォーマットするために使用されます。つまり、入力フィールドで日付が正しくフォーマットされています。

しかし問題は、入力フィールドで日付が変更されるたびに、システムが変更を検出しないことです。

「日付」を「値」に置き換えると、値が変更されたときに正しく解釈されますが、フォーマットがわかりません:

<input type="text" class="datepicker" data-bind="value: demandDate" /> 

何か案が?

4

1 に答える 1

8

update:バインディング ハンドラのは、 からvalueHasMutated()が発行された後に起動されknockout.js ViewModelます。ViewModelカスタムから に変更を正しく適用する場合は、入力の変更イベントのbindingHandlerイベント ハンドラーを作成しinit:、変更を に発行する必要がありViewModelます。

例:

ko.bindingHandlers.date = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        ko.utils.registerEventHandler(element, 'change', function (event) {
            valueAccessor().demandDate($(element).val());
        }
    },
    update: function (element, valueAccessor, allBindingsAccessor) {
        var value = valueAccessor();  // 'Mon Sep 10 2012 02:00:00 GMT+0200 (Paris, Madrid (heure d’été))'; 
        var date = moment(value());
        $(element).val((date.format('DD/MM/YYYY')));
    }
};
于 2013-03-29T09:43:22.990 に答える