2011-11-02 10 views
6

マスターページを使用するMVC 2 Webアプリケーションがあります。マスターページでは、単に以下のファイル同様に私のjQuery .readyが最後に実行されるようにする方法

$(document).ready(function() { 
    ... 
}); 

に散在1のようないくつかの準備ができてブロックがある、私の意見の多くは、複数の準備のブロックが全体に散らばっています。

最後に実行する別の準備ブロックをマスターに導入するように求められました。

私の質問は「この新しい準備ブロックが最後に実行されることを保証する方法はありますか?」です。私はマスターページの一番下にそれを置くとそれを置くと思っていましたが、これが確実であると自分自身に確信させるようなことはできません。

+3

私はそれがどのように動作するのか理解していれば、それがページの最後であることを確認するだけで十分です。 –

+0

WebページはマスターとMVCビューに基づいてサーバー上で「合成」されているので、$(document).ready()をマスターファイルの最後に置くとそのトリックが行われることは保証できますか? – wcm

答えて

5

これは、すべてのコールバックのリストにあなたの$(document).ready()のコールバックをプッシュすると呼ばれているjQueryの.add方法であって、

add = function(args) { 
    var i, length, elem, type, actual; 
    for (i = 0, length = args.length; i < length; i++) { 
     elem = args[ i ]; 
     type = jQuery.type(elem); 
     if (type === "array") { 
      // Inspect recursively 
      add(elem); 
     } else if (type === "function") { 
      // Add if not in unique mode and callback is not in 
      if (!flags.unique || !self.has(elem)) { 
       list.push(elem); 
      } 
     } 
    } 
} 

ソース:jQuery's callback

ので:それは基本的に推進しているんどのようなすべてのlist配列の内部とイベントの後の関数がトリガされている - 同じ順序でそれらを呼び出すと、あなたの関数が最後にプッシュされた場合、最後に呼び出されます。

は、他のすべての .jsのファイルを含めた後、あなたも頭の中でそれを宣言することができ、最後のそれをプッシュする (真下他 $(document).ready()がないことを確認してください)

+0

ウェブページはマスターとMVCのビューに基づいてサーバー上で「合成」されているので、$(ドキュメント).ready()をマスターファイルの最後に置くことはそのトリックを保証しますか? – wcm

+0

ご参考までに、説明とコードの表示に感謝します。 – wcm

+0

@wcm私はかなりあなたができると確信しています:) – Teneff

0

ここで少しトリックをすることができると思います。私はあなたのソリューションに合わせなければならない正確なケースを知らないよう は、私はあなたがここにあなたのcuntion、ミリ秒単位*遅延時間*)に

window.setTimeout(呼び出しを介して遅延を追加することを示唆しています。

私はそれが優雅ではないことを知っていますが、これは私が考えていたことです、これがあなたを助けてくれたら教えてください、ありがとう。

1

は、ここで私が使用してトリックです。マスターページでは、その後、子ページでは、あなたが最後に実行する必要のあるコードのビットを持っている場合、マスターページの$(文書で、今

postReadyEvents.push(function() { 
    ///your stuff - I usually use this to resize a grid or something. 
}); 

を行う

var postReadyEvents = []; 

を宣言あなたは、両方の子ページとマスターページ上の$(ドキュメント).ready()を持っている場合).ready()、

for(var i = 0; i < postReadyEvents.length; i++) 
{ 
    postReadyEvents[i](); 
} 

を行い、子ページは、最初に実行され、マスターページが最後に実行されます。この方法では、特定のコードブロックがいつ実行されるかを制御することができます。

関連する問題