0

我正在使用:https ://github.com/blueimp/jQuery-File-Upload

基本上,我需要能够保存当前done回调并在我自己的done回调中调用它,这非常复杂(我不熟悉 jquery ui 小部件)。

这是我试图工作但无济于事的代码:

var $el = $('#fileupload');
$el.fileupload();
var olddone = $el.fileupload('option', 'done');
$el.fileupload('option', 'done', function(e, data) {
    data = ... manipulate data ...;
    return olddone(e, data);
});

我已经尝试了主题的各种变体:

return olddone.call(this, e, data);

和:

return olddone.call($el.data('fileupload'), e, data);

和:

return olddone.call($el[0], e, data);

所有错误基本上都告诉我这this是不正确的,并且上下文不适合所有以下调用。我究竟做错了什么?如何或多或少地将特定回调子类化但仍使用/调用原始回调?

更糟糕的是,复制done回调的源代码olddone(而不是保存引用并调用它)似乎也不起作用。

thisjQuery UI Widget 选项函数的上下文是什么?为什么这么复杂?我错过了什么?

编辑: 在阅读了一些小部件文档之后,似乎所有方法总是使用小部件实例调用this,那么为什么下面的工作不正确呢?

olddone.call($el.data('fileupload'), e, data)

更新:

我试图done:在这里保留回调optionshttps ://github.com/blueimp/jQuery-File-Upload/blob/75d11179fd9c248c061c8eb428782bb556c8db0a/js/jquery.fileupload-ui.js#L139

4

1 回答 1

1

发现我滥用了传入的数据,我真的只需要正确使用它。这是我需要让它工作的最终代码。

var olddone = $el.data('fileupload').options.done;
$el.fileupload('option', 'done', function(e, data) {
    data.result = ... manipulate data ...;
    return olddone.call(this, e, data);
});

olddone.call(this, ...)事实证明,出于某种原因,它仍然是必要的。不确定为什么this是从当前上下文继承的,而是未定义的。

于 2012-05-17T01:27:58.963 回答