关于我的输入上的基因敲除.js:BindingHandlers,基因敲除未正确解释

BindingHandlers on my input with knockout not correctly interpreted

我正在使用带有durandal模板的网站。

我的date有以下bindingHandlers:

1
2
3
4
5
6
7
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')));
    }
};

在我看来这是电话:

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

这用于以正确的格式格式化我的日期。它的工作原理是我的日期在输入字段中的格式正确。

但是问题在于,只要在输入字段中修改了日期,系统就不会检测到任何更改。

如果我将"日期"替换为"值",则当值更改时会正确解释,但我错过了格式设置:

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

有什么主意吗?


knockout.js ViewModel发出valueHasMutated()后,将触发绑定处理程序的update:。如果要正确地将自定义bindingHandler中的更改应用于ViewModel,则需要在init:中为输入的change事件创建事件处理程序,然后对ViewModel发出更改。 >

示例:

1
2
3
4
5
6
7
8
9
10
11
12
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')));
    }
};