【问题标题】:BindingHandlers on my input with knockout not correctly interpreted我的输入上的 BindingHandlers 没有正确解释敲除
【发布时间】:2013-03-19 22:17:20
【问题描述】:

我在一个使用 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" /> 

有什么想法吗?

【问题讨论】:

    标签: knockout.js durandal


    【解决方案1】:

    绑定处理程序的update:valueHasMutated()knockout.js ViewModel 发出后被触发。如果您想从您的自定义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')));
        }
    };
    

    【讨论】:

    • 感谢您向我推荐方向。完整的解决方案可以在这里找到:stackoverflow.com/questions/6612705/…
    • 不会 valueAccessor()($(element).val());比 valueAccessor().demandDate($(element).val()); 更有意义使这个绑定更可重用?
    猜你喜欢
    • 1970-01-01
    • 2013-04-21
    • 2016-12-05
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多