Создание моих собственных обратных вызовов - PullRequest
3 голосов
/ 24 августа 2009

У меня есть страница с некоторым jQuery и отдельной не-jQuery функцией.

В настоящее время моя функция работает на $ (document) .ready, но я хочу вызвать функцию jQuery, как только моя функция будет завершена. Я могу передать свою функцию в качестве обратного вызова любой функции jQuery, но как я могу настроить все наоборот?

Итак, в идеале я хотел бы знать, как создать функцию foo, которая позаботится об этом для меня:

$(document).ready(function() {
  foo(myfunction(), $(bar).something);
}

или как расширить существующую функцию для обработки обратных вызовов. Спасибо.

Ответы [ 3 ]

6 голосов
/ 24 августа 2009

Определите вашу функцию для принятия (необязательного) обратного вызова, затем используйте метод javascript call () или apply () , если обратный вызов существует. Чтобы сохранить контекст, передайте текущее значение this (или любой другой контекст, который вы хотите) в метод apply. Call () и apply () различаются в зависимости от того, как передаются аргументы.

function myfunction(callback) {
    // do stuff
    if (callback) 
        callback.apply(this);
}
2 голосов
/ 24 августа 2009

Как насчет переноса функций:

Function.prototype.appendCallback = function(callback){
  var fn = this;
  return function(){
    fn.apply( this, arguments ); // execute original function
    callback.call(this);         // then the callback
  };
};

Пример:

var newConfirm = window.confirm.appendCallback(function () {
  alert('after from callback');
});

newConfirm('hello?'); // shows a confirmation, and then executes the callback.
2 голосов
/ 24 августа 2009

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

Если у вас было что-то вроде этого:

var add = function(a, b){
    return a+b;
};

Чтобы добавить обратный вызов, измените его на:

var add = function(a, b, callback){
    callback();
    return a+b;
};

(крайне плохой пример, но он все понял)

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