我正在使用knockout将一些文本字段绑定到observables。现在我正在使用默认行为,其中vm在文本框的模糊上更新。我知道我可以更改行为以更新其他事件(如keydown或onchange)上的vm但我想尽可能防止这种情况。
对于解决方法,在我的“保存”功能中,我要做的第一件事就是将焦点设置为用户点击的“保存”按钮/链接。我不知道为什么浏览器默认不会发生这种情况,但没什么大不了的。如果那是用户所在的最后一个字段,则显式设置焦点会导致编辑框的onblur。这会更新虚拟机,事情看起来不错。如果用户输入数据并且我没有设置焦点,则不会更新vm中的observable。
我的测试是在相对较快的设备上完成的。我想知道在我将焦点设置到按钮/链接的时间和从编辑框的模糊事件更新vm observable的时间之间是否有一个小的时间间隔。我设置焦点后立即继续保存数据。到目前为止没有任何问题,数据每次都在那里。但我可以在较慢的设备上保证这一点。
沿着同样的路线,是否有一个我可以调用的方法,它会导致所有的obs变量从它们的绑定UI元素更新,并且当所有变量都被更新时会返回一个promise?然后我可以继续保存。
只需查找不涉及更新每个键击或更改事件的变量的选项,还要确保我获得最后一次更改。
感谢
编辑:问题是,如果用户编辑了绑定字段,然后单击“保存”按钮,则该编辑框的更改不会在vm中更新,因为未发生模糊事件。我通过自己设置焦点来强迫模糊。但我担心在设置焦点(导致模糊)和更新vm的时间之间可能存在计时问题。
查看代码:
<input data-bind="value: accountName" placeholder="Enter Account Name"/>
vm:
var accountName= ko.observable('');
在我的保存功能中设置焦点
$('#btnSave').focus();
(continue save processing here. Need to make sure accountName has been updated)