Knockout.js 将BindingHandler中的更改还原2次无效
我正在开发一个自定义BindingHandler来显示/编辑输入框中的日期。每当用户键入无效日期时,我都希望清除输入框 注:输入日期的输入框是可观察的(从breeze查询) 以下是我的实际实现:Knockout.js 将BindingHandler中的更改还原2次无效,knockout.js,breeze,Knockout.js,Breeze,我正在开发一个自定义BindingHandler来显示/编辑输入框中的日期。每当用户键入无效日期时,我都希望清除输入框 注:输入日期的输入框是可观察的(从breeze查询) 以下是我的实际实现: ko.bindingHandlers.dateRW = { //dateRW --> the 'read-write' version used both for displaying & updating dates init: function (element, va
ko.bindingHandlers.dateRW = {
//dateRW --> the 'read-write' version used both for displaying & updating dates
init: function (element, valueAccessor, allBindingsAccessor) {
var observable = valueAccessor();
//handle the field changing
ko.utils.registerEventHandler(element, "change", function () {
var value = $(element).val();
var dateFormatted = moment.utc(value, "DD/MM/YYYY");
if (dateFormatted!=null && dateFormatted.isValid())
observable(dateFormatted.toDate())
else {
observable(null);
}
});
},
update: function (element, valueAccessor, allBindingsAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
var date = (typeof value !== 'undefined') ? moment.utc(value) : null;
var dateFormatted = (date != null) ? date.format('DD/MM/YYYY') : '';
$(element).val(dateFormatted);
}
};
运行良好的示例:
- 用户正在键入2013年12月25日>>日期有效
- 接下来,用户输入1234>>日期无效>>输入框被清除
- 接下来,用户键入01/04/2013>>日期有效
- 用户正在键入1234>>日期无效>>输入框已清除
- 接下来,用户键入5678>>日期(再次!)无效>>输入框不再清除李>
谢谢。我想你要找的是
valuehassmutated
函数,它可以在可观察对象上调用,以迫使它用最新的值更新其订户。在您的示例中,您可以替换:
observable(undefined);
observable(null);
与:
或:
不幸的是,它不起作用。我得到了错误
dependentObservable没有方法值hassmutated
。这是一个计算的可观测值?这不是一个计算的可观测值。这是breeze提供的一个可观测值(查询了每个字段都可观测的表)。这非常奇怪(请参阅),因为任何可观测值通常都有这个函数。也许你可以尝试使用“notifySubscribers”,通过组合observable(null)查看我的更新答案代码>和可观察。notifySubscribers(空)代码>它可以工作。我需要两者,因为notifySubscribers
不更新数据,它只通知某些数据已更改。谢谢你的帮助是有益的。
observable(undefined);
observable(null);
observable.valueHasMutated();
observable.notifySubscribers(null);