Как использовать .queue () для правильной цепочки пользовательских функций обратного вызова? - PullRequest
3 голосов
/ 06 марта 2011

Я пытаюсь выяснить, как связать пользовательские функции:

У меня есть что-то вроде этого:

show_loader(0, function() {
    open_box($target_open, event.value, '.wide-col', function() {
        hide_loader(function() {
            scroll_to_content($target_open, function() {
            });
            $(this).dequeue();
        });
        $(this).dequeue();
    });
    $(this).dequeue();
});

Эти функции имеют реализованный обратный вызов, который выглядит примерно так:

function show_loader(position, callback) {
    $ajaxSpinner.fadeIn();
    status = "loading"; //some non-jQuery stuff
    if (callback) $ajaxSpinner.queue( function() {callback()} );
}

Вы можете понять основную идею того, что я пытаюсь сделать: выполнить мои функции после завершения анимации внутри функций.

Я не думаю, что мой код достаточноправо.Порядок должен быть таким: показать загрузчик, открыть окно, скрыть загрузчик, а затем, наконец, прокрутить до содержимого.Вместо этого, похоже, что это то, что на самом деле происходит, когда я тестирую его: показать загрузчик, скрыть загрузчик, прокрутить до содержимого, затем открыть окно.

Как получить порядок вызовов функций в очереди?И использую ли я keyowrd "this" в правильном контексте?

1 Ответ

1 голос
/ 06 марта 2011

Вы можете увидеть основную идею того, что я пытаюсь сделать: выполнить мои функции после завершения анимации внутри функций.

Если вы используете стандартные функции анимации из jQuery, вы должны иметь возможность напрямую передавать им обратный вызов. E.g.:

function show_loader(position, callback) {
    $ajaxSpinner.fadeIn(callback);
    status = "loading"; //some non-jQuery stuff
}

Посмотрите на http://api.jquery.com и посмотрите, как они работают.

Обновление:

Вот пример, который дает желаемый результат, используя queue. Я использую более новую форму, где следующая выполняемая функция передается в качестве аргумента для обратного вызова. Возможно, вы делаете что-то не так с dequeue. Редактировать: я попробовал ваш код, и он отлично работает. Я предполагаю, что вы не используете queue должным образом в других функциях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...