我在一个有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" />
这用于以正确的格式格式化我的日期。它的工作原理我的意思是我的输入字段中的日期格式正确。
但问题是,只要在输入字段中修改日期,系统就不会检测到任何更改。
如果我将'date'替换为'value',当值改变时会正确解释,但我会错过格式化:
<input type="text" class="datepicker" data-bind="value: demandDate" />
有什么想法吗?
答案 0 :(得分: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')));
}
};