多次调用的方法,而不是一次

时间:2013-02-19 17:30:19

标签: knockout.js

我有一个编辑方法,当点击一行时调用,设置编辑信息(焦点调用,选择调用以便于输入)...一切正常,没有调用下一个编辑(当一个人到达行中的最后一个元素,我在observable数组中搜索下一个元素......如果有一个元素,它会通过再次调用相同的方法移动到下一个元素。)

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

有什么建议吗?

这是一个小提琴:Example

第51行的电话,

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

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

1 个答案:

答案 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;
});

更新了小提琴:http://jsfiddle.net/ostgals/GmZjF/4/