【发布时间】:2015-12-15 21:52:08
【问题描述】:
Knockout 具有默认行为,如果您在编辑输入控件内的值(由 Value 类型的绑定填充)后更改焦点(例如,通过单击输入控件外部),则更新关联模型.
这里是官方文档页面解释的链接,部分参数:
http://knockoutjs.com/documentation/value-binding.html
你知道禁用这种默认行为的方法吗?
这背后的原因:我使用的模型可以通过比较之前的值和新的值来判断他们的最后一次更新是否需要持久备份。 我想在我的表单输入上收听按键事件,但如果我这样做,淘汰赛会触发两次事件(默认一个 + 按键)来更新模型,第二个基本上是告诉我的模型替换值使用相同的值,因为它已经更新,它转换为“由于值没有改变,因此无需进行持久备份”。
我很乐意感谢任何帮助或建议,因为我卡住了,找不到解决办法:)
编辑 无法用裸骨干代码重现错误。似乎“超级酷”说 valueUpdate 应该覆盖当您使用带有绑定值的表单控件时触发的默认 Blur 事件。 这可能是我用来创建 ViewModel 的库 Knockback 引入的错误。
尽管如此,只是用绑定 textInput 替换绑定 Value 就可以了。谢谢大家。
【问题讨论】:
-
如果您使用
valueUpdate使用任何事件,默认的将被覆盖。此处示例(检查控制台)jsfiddle.net/LkqTU/28085 . -
我无法通过修改您的 jsfiddle.net 代码来证明我所说的。我尝试了以下几行,但不幸的是 keyup 没有触发: self.firstName.subscribe(function(item){console.log('change '+item)}, self, "change"); self.firstName.subscribe(function(item){console.log('keyup '+item)}, self, "keyup");
标签: events knockout.js default