Как получить промежуточный коллбэк 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 был унаследован от текущего контекста и вместо этого был неопределенным.

Другие вопросы по тегам