我在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函数指定为成员(或者实际上我可能,但只是以一些更丑陋的方式)。
答案 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);
这将创建一次该函数,并在每次激活滚动时重复使用它。