Knockout.js 未正确解释带敲除的输入上的BindingHandler

Knockout.js 未正确解释带敲除的输入上的BindingHandler,knockout.js,durandal,Knockout.js,Durandal,我使用durandal模板在一个网站上工作 我的约会有以下绑定处理程序: 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é))';

我使用durandal模板在一个网站上工作

我的约会有以下绑定处理程序:

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" /> 


有什么想法吗?

knockout.js
视图模型
发出
valueHasMutated()
后,绑定处理程序的
更新:
被触发。如果要从自定义的
bindingHandler
将更改正确应用于
ViewModel
,则需要在
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')));
    }
};

谢谢你给我介绍情况。在这里可以找到一个完整的解决方案:不会使用valueAccessor()($(element.val());比valueAccessor().demandDate($(element.val())更有意义;要使此绑定更加可重用?