Events 敲除-禁用对表单元素使用绑定值时更新模型的默认行为

Events 敲除-禁用对表单元素使用绑定值时更新模型的默认行为,events,knockout.js,default,Events,Knockout.js,Default,如果在编辑输入控件内的值(由值类型的绑定填充)后更改焦点(例如,通过在输入控件外单击),则Knockout具有更新关联模型的默认行为 以下是官方文档页面说明的链接,章节参数: 您知道禁用此默认行为的方法吗 这背后的原因是:我使用的模型可以通过比较以前的值和新值来判断上次更新是否需要持久备份。 我想在我的表单输入上监听key-up事件,但如果我这样做,knockout会触发两次事件(默认事件+key-up)来更新模型,第二个事件基本上是告诉我的模型用相同的值替换该值,因为它已经更新了,它会转换为

如果在编辑输入控件内的值(由值类型的绑定填充)后更改焦点(例如,通过在输入控件外单击),则Knockout具有更新关联模型的默认行为

以下是官方文档页面说明的链接,章节参数:

您知道禁用此默认行为的方法吗

这背后的原因是:我使用的模型可以通过比较以前的值和新值来判断上次更新是否需要持久备份。 我想在我的表单输入上监听key-up事件,但如果我这样做,knockout会触发两次事件(默认事件+key-up)来更新模型,第二个事件基本上是告诉我的模型用相同的值替换该值,因为它已经更新了,它会转换为“由于值没有更改,因此无需执行持久备份”

我很高兴能得到任何帮助或建议,因为我陷入困境,找不到出路:)

编辑 无法用裸主干代码重现错误。似乎“超级酷”说valueUpdate应该覆盖默认的模糊事件,当您使用具有绑定值的表单控件时会触发该事件。 这可能是我用来创建ViewModel的库击退引入的错误


尽管如此,用binding textInput替换绑定值还是奏效了。谢谢大家。

不要收听事件,订阅更新,除非值发生更改,否则更新不会触发。使用
textInput
绑定将注册对值的每一次更改,即使是使用“剪切”和“粘贴”等菜单项完成的更改它们发生了

同样,您可以将
绑定与
值更新一起使用:“输入”

vm={
myvar:ko.observable(),
更新:ko.observearray()
};
vm.myvar.subscribe(函数(newValue){
vm.updates.push(newValue);
});
ko.applyBindings(vm);


如果您使用任何事件使用
valueUpdate
,默认值将被覆盖。此处示例(检查控制台)。我无法通过修改您的jsfiddle.net代码来证明我所述的内容。我尝试了以下几行,但不幸的是没有触发keyup:self.firstName.subscribe(函数(项){console.log('change'+item)},selfchange”);self.firstName.subscribe(function(item){console.log('keyup'+item)},self,“keyup”);问题可能出在其他地方,但绑定textInput正在工作。我将接受此快速修复,谢谢:)