2011-08-09 25 views
0

グリッドにデータをロードする前に実行されるjQueryにフックの配列があります。しかし、あるケースでは、フックを外して、後でそれを追加したいと思う。私がやっていることはまさにうまくいきません...私はまだ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); }); 

EDITは それは問題は、コード内の他の場所である判明します。しかし、私はまだこれを達成するための最良の方法を知りたいです。

+3

これはどのような方法でjQueryに関連していますか? – rid

+0

まあ、それはちょうどもっとjavascriptの構文だと思います – stinkycheeseman

答えて

2

あなたはこのように削除した機能を追加するだけではありませんか?

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

そして、それは常にあなたが削除したい配列の最後の一つだあなたはよろしいですか?

+0

はい、問題は残念ながらコードのどこかにあります。私はこれを行っていたし、機能していなかったので、関数()でpreLoadをラップしなければならないと信じられましたが、コードが記述される方法は間違ったオブジェクトにフックを追加することです。私の間違い! – stinkycheeseman

4

他の配列に格納されている他の変数と同じ方法でアクセスします。

this.opts.hooks.preLoad[0](myReport) 
2

おそらく、関数をスタックに戻すときに引数 "レポート"を "缶詰め"していることと関係していると思います。

はそのようにそれをやって試してみてください。

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

私はあなたが与えた例では、jQueryのとは何の関係もないとJavascript純粋であるhttp://jsfiddle.net/fWRez/

1

ここでそれをテストしてみました。また、あなたの例であなたがやっていることは正しいことではないことに注意してください。このことを考えてみましょう:あなたはこれを実行すると

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) { ... } } } 
) 

をあなたはすべての時間を実行しますが、自分自身の中に包まれた機能を推進しているのであなたのコード。私はなぜあなたがpoppushに戻る必要があるのか​​分からないが、これは奇妙に見える。

また、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. 
関連する問題