gpt4 book ai didi

javascript - 2.2.0 版本异常键触发的 knockout.js 值绑定(bind)

转载 作者:行者123 更新时间:2023-11-29 10:20:21 25 4
gpt4 key购买 nike

考虑以下简单示例:

<input data-bind="value: query, valueUpdate: 'afterkeydown'"/>

在 knockoutjs 2.1.0 中,当我按 ctrl向上箭头向下箭头Shift 绑定(bind)被触发并且查询没有更新。

在 knockoutjs 2.2.0 中,绑定(bind)会触发所有上述按键。

这对一些现有代码造成了严重破坏(这是一个自动完成,向上和向下箭头经常用于从下拉列表中进行选择)。

哪种行为是正确的?我假设从技术上讲,后者是正确的,因为按下这些键一个按键事件,但绑定(bind)不应该只在值发生变化时触发吗?

我想让一切都保持实时,docs state :

"afterkeydown" is the best choice if you want to keep your view model updated in real-time

建议?

最佳答案

我按照上面建议的subscribe方法,但是看起来有点乱,不符合knockout的精神。一位同事建议编写一个扩展程序,在没有更改的情况下抑制绑定(bind)(这将模拟 2.1 行为):

ko.extenders.suppressNoChange= function(target) {
var result = ko.computed({
read: target,
write: function(newValue) {
var current = target();
if (newValue!== current) {
target(newValue);
}
}
});
result(target());
return result;
};

所以现在我们可以扩展我们的计算可观察量,以便在没有发生任何变化的情况下不会触发绑定(bind)。

我们可以这样使用它:

ko
.computed({
read: function(){},
write: function(v){})
.extend({
suppressNoChange: null
});

并允许我对问题中的 2.2 fiddle 进行非常小的更改以恢复 2.1 行为。

参见 http://jsfiddle.net/Rmcza/26/

关于javascript - 2.2.0 版本异常键触发的 knockout.js 值绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com