我有一个编辑方法,当点击一行时调用,设置编辑信息(焦点调用,选择调用以便于输入)...一切正常,没有调用下一个编辑(当一个人到达行中的最后一个元素,我在observable数组中搜索下一个元素......如果有一个元素,它会通过再次调用相同的方法移动到下一个元素。)
问题是,当调用此方法时,它会将请求堆叠在内存中,并将每个连续调用都写入操作。我知道在jquery方法上你可以调用unbind方法来释放以前对相同方法的调用,不知道为淘汰递归函数执行此操作的最佳方法是什么。
有什么建议吗?
这是一个小提琴:Example
第51行的电话,
self.editItem(self.items()[index + 1]);
是一个递归调用,它将editItem调用到列表中的下一个项目...第26行有一个警告,当editItem方法运行时会调用该警报显示运行中的差异。如果你单击一行,然后单击任何其他行,它可以正常工作,选择正确,等等......但是如果你在右边的最后一个字段上选中(当它选择下一个可用项目时),它开始堆叠。
答案 0 :(得分:2)
你不应该在这里使用委托方法.live
,因为每次editItem
调用新的keydown回调都被添加到早期回调的堆栈中。
所以只需要改变两件事:
// change .live('keydown', ...) to .keydown(...) or .bind('keydown', ...)
$('#itemDescriptionEdit').keydown(function (e) {
// ...
// and return false at the end of callback to stop event propagation
return false;
});