Knockout - 在使用带有表单元素

时间:2015-12-14 11:07:04

标签: events knockout.js default

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

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

部分

http://knockoutjs.com/documentation/value-binding.html

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

背后的原因:我使用的模型可以通过将之前的值与新值进行比较来判断它们的上次更新是否需要持久备份。  我想在我的表单输入上听取键上事件但是如果我这样做,则敲除触发两次事件(默认的一个+键向上)来更新模型,第二个基本上是告诉我的模型替换值使用相同的值,因为它已经更新,它转换为“没有必要进行持久备份,因为值没有改变”。

我很乐意感谢任何帮助或建议,因为我卡住了,无法找到方法:)

修改 无法使用裸骨干代码重现错误。似乎“超酷”表示valueUpdate应该覆盖默认的Blur事件,该事件在您使用带有绑定值的表单控件时触发。 它可能是我用来创建ViewModel的库Knockback引入的错误。

尽管如此,只需用绑定textInput替换绑定值就可以了。谢谢大家。

1 个答案:

答案 0 :(得分:0)

请勿听取此事件,订阅更新,除非更改了值,否则不会触发更新。使用textInput绑定将记录值的每个更改,即使是在发生时使用剪切和粘贴等菜单项完成的更改。

同样,您可以将value绑定与valueUpdate: 'input'

一起使用



vm = {
  myvar: ko.observable(),
  updates: ko.observableArray()
};

vm.myvar.subscribe(function(newValue) {
  vm.updates.push(newValue);
});
ko.applyBindings(vm);

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<input data-bind="textInput: myvar" />
<div data-bind="foreach: updates">
  <div data-bind="text: $data"></div>
</div>
&#13;
&#13;
&#13;