gpt4 book ai didi

knockout.js - KnockoutJS - 我如何去抖动点击?

转载 作者:行者123 更新时间:2023-12-04 04:39:39 26 4
gpt4 key购买 nike

我想更改按下按钮时默认发生的情况 - 我需要防止按钮被双击。

一种选择是将按钮绑定(bind)到的函数包装在下划线的 _.once() 或 _.throttle() 中,但如果在堆栈的更高层处理它会更好。

所以我发现了这个问题:knockoutjs overriding bindinghandlers和答案中引用的 fiddle ( http://jsfiddle.net/rniemeyer/PksAn/ )并试图用它做点什么。下面是 fiddle 的原始代码。

(function(){
var originalInit = ko.bindingHandlers.click.init,
originalUpdate = ko.bindingHandlers.click.update;

ko.bindingHandlers.click = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
var wrappedValueAccessor = function() {
return function(data, event) {
ko.bindingHandlers.click.preOnClick.call(viewModel, data, event);
valueAccessor().call(viewModel, data, event);
ko.bindingHandlers.click.postOnClick.call(viewModel, data, event);
};
};

originalInit(element, wrappedValueAccessor, allBindingsAccessor, viewModel);
},
update: originalUpdate,
preOnClick: function(data, event) {
},
postOnClick: function(data, event) {
}
};
})();

我尝试用 _.throttle() 包装 WrappedValueAccessor,也尝试包装嵌套函数,但结果表明 valueAccessor() 每次都返回一个新函数,我认为这就是我应该包装的。

该代码在这里:(来自从第 2043 行开始的 knockout-2.2.1.debug.js)
function makeValueAccessor(bindingKey) {
return function () { return parsedBindings[bindingKey] }
}

这意味着我必须进入 knockout 的内部,这似乎是错误的。

所以我的问题是,我的想法是正确的还是方法完全错误。有一个更好的方法吗?

最佳答案

您可以创建一个 debounce您的 valueAccessor 的版本返回处理函数并存储它,并从 wrappedValueAccessor 返回该去抖动版本功能:

init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
var debouncedAccessor = _.debounce(valueAccessor(), 800, true)
var wrappedValueAccessor = function() {
return debouncedAccessor;
};
originalInit(element, wrappedValueAccessor, allBindingsAccessor, viewModel);
},
演示 JSFiddle .

关于knockout.js - KnockoutJS - 我如何去抖动点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092128/

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