【问题标题】:Knockout binding works when typed, but not when bar-coded敲除绑定在键入时有效,但在条形码时无效
【发布时间】:2014-10-23 19:07:13
【问题描述】:

我有一个适用于 Keyup 的自定义绑定,当用户手动输入数据时,valueAccessor().call 可以正常工作并输入所需的下一个函数。然而,当我们对相同的数据进行条形码化,并发送相同的返回键时,(我已经用两种方法检查了发送的最后一个 keyCode 是 13)valueAccessor 不会进入下一个函数并退出。

我怀疑这可能与条形码数据输入字段的速度和随后的“输入”键有关。减慢输入条形码字符的速度会有所帮助吗?如果是,您建议采用什么方法?

ko.bindingHandlers.enterKey = {
init: function (element, valueAccessor, allBindings, vm) {
    ko.utils.registerEventHandler(element, "keyup", function (event)
    {
        if (event.keyCode === 13)  {
            ko.utils.triggerEvent(element, "change");
            valueAccessor().call(vm, vm); 

        }

        return true;
     }
    );
}

【问题讨论】:

  • 你确定它被解雇了吗? On key up 似乎不会以同样的方式捕捉程序化事件,但我可能错了......
  • 我很确定它是。我在 Chrome 中的 if 语句下方放置了一个断点,它停在那里。我正在评估那里的 Keycode,它设置为 13。不过,我可能会误解我所看到的内容。
  • 我不明白您所说的“valueAccessor 没有进入下一个函数并退出”是什么意思。你能解释一下吗?
  • 当然,当数据通过键盘输入字段并且用户按回车键时,我观察到 keyCode = 13 然后代码进入 Triggerevent 然后调用 valueAccess().call ,然后调用另一个函数扫描,这是预期的行为。但是,当使用条码阅读器扫描相同的数据时,keyCode 的计算结果与之前一样为 13,调用 triggerEvent 并且代码会执行 valueAccess().call,但接下来不会调用 Scan数据是用键盘输入的。我在这两种方法中都比较了 vm,它们是相同的
  • 附带说明,使用内置的 event binding 比自定义绑定处理程序 IMO 更合适,至少就代码所示而言。您只需执行event: { keyup: myCallback },如果需要冒泡,则从myCallback 返回true。

标签: knockout.js barcode bindinghandlers


【解决方案1】:

感谢您对此的帮助。事实证明,VM 中有一个错误命名的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多