Как получить промежуточный коллбэк jqery-файла options.done?
Я использую: 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
(вместо сохранения ссылки и вызова ее), похоже, тоже не работает.
Что такое this
в контексте функции параметров виджета пользовательского интерфейса jQuery? Почему это так запутанно? Что мне не хватает?
РЕДАКТИРОВАТЬ: После прочтения некоторой документации виджета, кажется, что все методы всегда вызываются с экземпляром виджета как this
Так почему же не работает следующая работа?
olddone.call($el.data('fileupload'), e, data)
ОБНОВИТЬ:
Я пытаюсь сохранить done:
обратный звонок в options
которые здесь: https://github.com/blueimp/jQuery-File-Upload/blob/75d11179fd9c248c061c8eb428782bb556c8db0a/js/jquery.fileupload-ui.js#L139
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
был унаследован от текущего контекста и вместо этого был неопределенным.