Knockout事件绑定意外行为

时间:2016-01-11 16:17:57

标签: javascript events knockout.js

我在DIV上有scroll事件的事件绑定。为了对处理程序进行去抖动,我在我的模型上引入了一个函数,它创建了去抖处理程序,并且我在我的视图中绑定了这个工厂函数。

我希望我的工厂创建去抖动功能,而敲除会将其绑定到事件中。相反,似乎淘汰赛重新创建并在每个事件触发器上调用我的去抖功能,因此去抖动根本不起作用。

我的观点

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

我的模特

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

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

相反,似乎淘汰赛将它全部包装到一个新函数中,因此它会在每个滚动事件上运行。

它如何在Knockout中有效?

更新

由于我使用TypeScript而且这个处理程序是一个类的成员方法,我只限于这种函数成员赋值,我不能直接将debounced函数指定为成员(或者实际上我可能,但只是以一些更丑陋的方式)。

1 个答案:

答案 0 :(得分:1)

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

 $lectures = $this->getDoctrine()
        ->getRepository('AquagestLecturesBundle:Lectura')
        ->createQueryBuilder('l')
    ->join('l.ncomptador','n')
    ->select('l','n')->orderBy('l.id')->getQuery()->getArrayResult();
return jsonResponse($lectures);

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