Как вызвать функцию, хранящуюся в массиве jQuery? - PullRequest
0 голосов
/ 09 августа 2011

У меня есть массив хуков в jQuery, которые выполняются перед загрузкой данных в сетку.В одном случае, однако, я хочу удалить крючок, а затем добавить его на потом.Все, что я делаю, работает не совсем правильно ... это, вероятно, ошибка синтаксиса, потому что я все еще плохо знаком с jQuery.Любая помощь будет оценена, спасибо!

Текущий код:

var preLoad = this.opts.hooks.preLoad.pop();
//stuff happens
//now I want to add the preLoad hook back
this.opts.hooks.preLoad.push(function(report) { preLoad(report); });

РЕДАКТИРОВАТЬ Оказывается, проблема заключается в другом месте кода.Однако я все еще хотел бы знать, как лучше всего это сделать.

Ответы [ 4 ]

4 голосов
/ 09 августа 2011

Вы обращаетесь к нему так же, как и к любой другой переменной, хранящейся в любом другом массиве.

 this.opts.hooks.preLoad[0](myReport)
2 голосов
/ 09 августа 2011

Вероятно, это связано с тем, что вы «отбрасываете» аргумент «report», когда помещаете функцию обратно в стек.

Попробуйте сделать это так:

var preLoad = this.opts.hooks.preLoad.pop();
//stuff happens
//now I want to add the preLoad hook back
this.opts.hooks.preLoad.push(preLoad);

Я проверял это здесь http://jsfiddle.net/fWRez/

2 голосов
/ 09 августа 2011

Разве вы не можете просто добавить функцию, которую вы удалили, как это?

var preLoad = this.opts.hooks.preLoad.pop();
//stuff happens
//now I want to add the preLoad hook back
this.opts.hooks.preLoad.push(preLoad);

И вы уверены, что это всегда последняя в массиве, которую вы хотите удалить?

1 голос
/ 09 августа 2011

Пример, который вы привели, не имеет ничего общего с jQuery и является чистым Javascript. Также помните, что то, что вы делаете в своем примере, ... не правильно. Учтите это:

var ReportManager {
   ...
   replace: function(report) {
      var preLoad = this.opts.hooks.preLoad.pop();
      //stuff happens
      //now I want to add the preLoad hook back
      this.opts.hooks.preLoad.push(function(report) { preLoad(report); });
   }
}

Если вы выполните это:

replace(null);
replace({foo:'bar'});
replace(null);

Ваш массив this.opts.hooks.preLoad будет выглядеть так:

Array(
   0: function(report) { return function(report) { return function(report) { ... } } }
)

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

Кроме того, Javascript - это очень гибкий язык; что означает, что вы можете делать много странных вещей, как

"hello".concat(" world");            // -> 'hello world'
0.toString();                        // -> '0'
(function(a) { return a; })("foo");  // -> 'foo'
(function() { return false; })() || (function() { return true; })(); // -> true (executes both functions)
(function(i) { return [i*2,i*3,i*4]; })(2)[1]; // -> 6
$('selector')[0];                    // ...
// etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...