3

我在一个使用 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')));
    }
};

这是我认为的电话:

<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 回答