Knockout事件绑定意外行为

Knockout event binding unexpected behaviour

本文关键字:意外 绑定 事件 Knockout      更新时间:2023-09-26

我有一个div上scroll事件的事件绑定。为了解除绑定处理程序,我在模型上引入了一个函数,该函数创建了解除绑定的处理程序,并且我在视图中绑定了这个工厂函数。

我希望我的工厂创建debounced函数,并将其与事件绑定。相反,它似乎在每个事件触发时都会重新创建并调用我的debouncid函数,所以debouncing根本不起作用。

我的视图

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

我的型号

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

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

相反,看起来淘汰赛是将其全部封装到一个新功能中,以便在每个滚动事件中运行。

它到底是如何在淘汰赛中发挥作用的?

更新

由于我使用的是TypeScript,而这个处理程序是一个类的成员方法,所以我仅限于这种函数成员分配,我不能直接将反跳函数分配为成员(或者实际上我可以,但只是以某种更丑陋的方式)。

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

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

这将创建一次功能,并在每次激活滚动时重复使用。