Knockout绑定处理程序拆解功能?

时间:2012-04-25 21:42:21

标签: javascript knockout.js

我有一个敲除绑定处理程序,它使用plupload进行拖放和ajax上传。

要使用plupload脚本,我创建了一个plupload实例,而后者又是将事件侦听器绑定到DOM元素。

工作正常。

但是,我有一个“文件夹”列表,当我点击文件夹时,我会显示该文件夹中的文件列表。我通过使用foreach绑定selectedFolder()。documents来重用相同的DOM元素。

我遇到的问题是在我的绑定处理程序中,我在init函数中执行所有的plupload操作,因为我重用了DOM元素,所以它们会绑定多个事件处理程序。这会导致拖放事件发送到alla处理程序。这意味着如果我在渲染文件列表上删除文件,drop事件也会触发所有先前渲染的文件列表。

我正在寻找的是绑定处理程序中的某种拆卸或清理功能,这样我可以在文件列表被取消渲染时取消注册所有事件(这是一个单词吗?)。

也许我们无法发现不退却?那我怎么处理呢?我不希望有一个全局实例,因为这会阻止我同时在多个地方使用绑定。

很抱歉没有给你任何代码。我在我的手机上。

干杯!

1 个答案:

答案 0 :(得分:32)

您可以注册将在KO删除元素时执行的处理程序(例如重新呈现模板时)。它看起来像:

    //handle disposal (if KO removes by the template binding)
    ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
        $(element).datepicker("destroy");
    });

因此,在“init”函数中,您将为要绑定的元素注册一个dispose回调,并且您将有机会运行您想要的任何清理代码。