我的输入上的BindingHandlers没有正确解释

Bro*_*ato 3 knockout.js durandal

我在一个带有durandal模板的网站上工作.

我有这个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')));
    }
};
Run Code Online (Sandbox Code Playgroud)

以下是我认为的电话:

<input type="text" class="datepicker" data-bind="date: demandDate" /> 
Run Code Online (Sandbox Code Playgroud)

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

问题是每当在输入字段中修改日期时,系统都没有检测到任何变化.

如果我将'date'替换为'value',那么当值改变时会正确解释,但我会错过格式化:

<input type="text" class="datepicker" data-bind="value: demandDate" /> 
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Kon*_*nev 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')));
    }
};
Run Code Online (Sandbox Code Playgroud)