2009-03-02 32 views

答えて

40

最初に注意しなければならないことはいくつかあります。 MSはSys.Applicationと呼ばれる一種の「クライアントサイド実行時オブジェクト」を発明しました。これは次のように、initloadを上げる処理し、ページの[クライアント側]寿命を通してunloadイベント:

  1. Sys.Application.initialize()は、ライフサイクルのinit一部を開始します。彼らは準備が整いました後に、このinitialize()のすべてのクライアント側のAJAXコントロールは、それがグローバル呼び出して、
  2. 最後に、このイベントをサブスクライブしているすべてのハンドラを呼び出し、プログラム的
  3. Sys.Applicationは、ライフサイクルのload一部を始まりと相互作用します関数pageLoad(定義されている場合)

手順2)と3)が部分的(つまり、AJAX + UpdatePanel)ポストバックごとに繰り返されます。

最終的に答えpageLoadSys.Application.add_load()への便利なショートカットです。

しかし、window.onloadとの関係に関しては、面白いことが始まります。本質的に、MSは、のinit段階が完了した後にだけを発射するためにwindow.onloadを必要とした。しかし、onload"コンテンツが読み込まれた"に接続されているので、ブラウザがいつ起動するかを制御することはできません。すべてのページ コンテンツは(画像 およびその他のバイナリコンテンツを含む)をロードした後

のonloadイベントが発生:これは"the window.onload problem"として知られています。 ページに多数の画像が含まれている場合、 ページがアクティブになる前に、 に目立つラグが表示されることがあります。

だから、イベントライフサイクルで適切なタイミングで発動する独自の「特別な」機能を発明し、それを"pageLoad"と呼びました。このカスタムイベントライフサイクルを開始するために使用したトリックはplace the call to Sys.Application.initialize() just before the closing </form> tagです。 serversideランタイムはこれを行います。巧妙な読者はpageLoadに入れたコードはバイナリの内容(w/ one rare catch for IE)とは独立して起動するため、このトリックでwindow.onloadの問題を解決することができました。

>これらは同じ動作をしますか?

概念的には、実際には全く言われていないので、window.onloadの問題です。唯一の規則は、AYAXコントロールと対話するコードをpageLoadに入れることです。window.onloadは独自のイベント軌跡に従うからです。

>もう一方が先に呼び出されていますか?

これらは完全に100%独立しています。

>自動的に呼び出されるのですか?

定義されている場合は、両方とも呼び出されます。

+1

あなたの答えは完了しましたが、pageLoadに別の問題があります。ページに置くと、自動的に呼び出されて呼び出されていることがわかりました。注意:私はtelerikを持っています:ページ上のRadAjaxManager起こっているか、それともタイマーで呼ばれているようにそのように呼ばれ続けるのは正常なのでしょうか? –

+1

素敵な書き込み+1 -解決策は非常に面白いです。 – annakata

+0

@amrelgarhy:私の更新された答えを見てください:ステップ2)と3)はすべての部分的(すなわちAJAX + UpdatePanel)ポストバックで呼び出されます。 –

関連する問題