【问题标题】:knockoutjs: multiple valueUpdates and choose which update happend淘汰js:多个值更新并选择发生哪个更新
【发布时间】:2014-08-16 18:15:37
【问题描述】:

我有一个带有值绑定的输入字段。绑定引用了一个可写的计算 observable。

预期的行为是:

  • 用户键入了一些字母:可写计算应该识别出用户仍在键入
  • 用户完成输入:可写文件应保存该值

但是,我只能选择updateValue: 'input'updateValue: 'keydown',但不能同时选择两者。在 JavaScript 代码中,可写计算无法检查发生了哪个事件。

出于这个原因,我需要这种行为:如果用户只是在打字,我想填写一个自动建议框,并希望将已经输入的字母加粗。为此,我需要 keydown 事件。但是,如果用户完成输入(失去焦点),我想做一些验证,然后保存输入的值。 如果我使用input,则验证正常,但自动建议功能已损坏。如果我使用keydown,用户将无法输入内容,因为验证总是失败并且用户无法完成输入。

【问题讨论】:

  • 一些简单的 jsfiddle 会很好,所以我们有一些东西可以玩
  • 已经回答了。但是谢谢,下次我会提供一个小提琴

标签: javascript jquery knockout.js


【解决方案1】:

假设您计算了名为self.inputValue,它引用了输入字段。

您可以在特定计算上应用 rateLimit 扩展器。

例如

self.inputValue = ko.computed(function(){
    //perform the required logic
}).extend({ rateLimit: { method: "notifyWhenChangesStop", timeout: 400 } });;

timeout 以毫秒为单位。它将保持值的更新或通知 400 毫秒。

这应该可以解决您的问题。我为您制作的一个小型 JSFiddle:http://jsfiddle.net/rahulrulez/x8jmcpLh/

rateLimit 是在 KO 3.1.0 中引入的,如果您使用的是旧库,请改用 throttle

【讨论】:

  • 感谢您的解决方案。但是……我的要求变了。我允许无效输入。如果用户将模型保存到后端,我将验证输入。所以我正在使用“keydown”监听器,它正在更新我的自动建议框,并在保存时进行验证。我选择你的答案作为解决方案,因为它回答了问题。
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2017-11-03
  • 2014-10-30
  • 1970-01-01
  • 2014-08-20
  • 2012-11-09
相关资源
最近更新 更多