Knockout.js 方法多次调用,而不是一次调用

Knockout.js 方法多次调用,而不是一次调用,knockout.js,Knockout.js,我有一个编辑方法,在单击行时调用该方法,以设置编辑信息(焦点调用,选择调用以方便输入)。。。无需调用下一次编辑,一切都正常(当一个人到达行中的最后一个元素时,我在可观察数组中搜索下一个元素……如果有,它将通过再次调用相同的方法移动到下一个元素) 问题是,当调用此方法时,它会将请求堆叠在内存中,并将每个连续的调用转化为操作。我知道在jquery方法中,您可以调用unbind方法来释放对同一方法的先前调用,但不确定对淘汰递归函数执行此操作的最佳方法是什么 有什么建议吗 这是一把小提琴: 51号线的电

我有一个编辑方法,在单击行时调用该方法,以设置编辑信息(焦点调用,选择调用以方便输入)。。。无需调用下一次编辑,一切都正常(当一个人到达行中的最后一个元素时,我在可观察数组中搜索下一个元素……如果有,它将通过再次调用相同的方法移动到下一个元素)

问题是,当调用此方法时,它会将请求堆叠在内存中,并将每个连续的调用转化为操作。我知道在jquery方法中,您可以调用unbind方法来释放对同一方法的先前调用,但不确定对淘汰递归函数执行此操作的最佳方法是什么

有什么建议吗

这是一把小提琴:

51号线的电话

self.editItem(self.items()[index + 1]);

是将editItem调用到列表上下一项的递归调用。。。第26行有一个警报,当editItem方法运行时调用该警报,显示运行中的差异。如果您单击一行,然后单击任何其他行,它工作正常,选择正确,诸如此类。。。但是,如果您在右侧的最后一个字段上(当它选择下一个可用项时)进行制表,它将开始堆叠。

您不应该在此处使用委派方法
。live
,因为每次
editItem
调用的new keydown callback都会添加到早期回调的堆栈中

所以只有两件事需要改变:

// 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;
});

更新的fiddle:

请提供一个在JSFIDLE上重新创建的绑定/调用方法或问题的示例。如果不看代码,就很难提供帮助。我正在研究它,需要对一些代码进行一些抽象,才能在JSFIDLE中进行编码,我想我会发布文章,看看以前是否有人遇到过类似的问题。添加FIDLE以在更简化的示例中显示问题,您也可以删除第28-37行,使其更清晰。