gpt4 book ai didi

javascript - knockout 事件绑定(bind)意外行为

转载 作者:行者123 更新时间:2023-12-03 07:57:55 24 4
gpt4 key购买 nike

我在 DIV 上有一个用于 scroll 事件的事件绑定(bind)。为了使处理程序去抖,我在模型上引入了一个函数,该函数创建去抖处理程序,并且我在 View 中绑定(bind)此工厂函数。

我希望我的工厂创建去抖函数,并且 knockout 会将其绑定(bind)到事件。相反,看起来 knockout 会在每个事件触发时重新创建并调用我的去抖函数,因此去抖根本不起作用。

我的看法

<div data-bind="event.scroll: getScrollHandler()"></div>

我的模型

var viewModel = {
getScrollHandler: function(data, evt) {
return debounceFunction(function(data, evt) {
// dp the actual handling...
});
}
};

我希望 getScrollHandler 方法仅在绑定(bind)初始化时执行一次,并且它将绑定(bind)返回的函数。

相反,knockout 似乎将其全部包装到一个新函数中,以便它在每个滚动事件上运行。

它在 knockout 中到底是如何运作的?

更新

由于我使用的是 TypeScript 并且此处理程序是类的成员方法,因此我仅限于这种函数成员分配,我无法直接将去抖函数分配为成员(或者实际上我可以,但在只是一些更丑陋的方式)。

最佳答案

假设您有一个实现 similar to this one ,其想法是创建一个新函数,然后使用它来代替原始函数。尝试将您的代码更改为:

getScrollHandler: debounceFunction(function(data, event) { 
...
})

这将创建一次该函数,并在每次激活滚动时重新使用它。

关于javascript - knockout 事件绑定(bind)意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34726258/

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