2009-03-02 16 views

Respuesta

40

Un par de cosas que observar primero. MS inventó una especie de "objeto de tiempo de ejecución del cliente" llamado Sys.Application. Se ocupa de elevar init, load y unload eventos durante toda la vida [clientside] de la página, de la siguiente manera:

  1. Sys.Application.initialize() comienza la parte init del ciclo de vida. Este initialize() s todos los controles clientside Ajax, después de lo cual está listo para ser interactuaron con programáticamente
  2. Sys.Application comienza la parte load del ciclo de vida, llamando a todos los controladores que se han suscrito a este evento
  3. Por último, llama al mundial función pageLoad (si se define uno)

Paso 2) y 3) se repiten para cada devolución de datos parcial (es decir, AJAX + UpdatePanel).

Así que finalmente la respuesta: pageLoad es solo un práctico atajo a Sys.Application.add_load().

Sin embargo, en lo que respecta a su relación con window.onload, las cosas comienzan a ponerse interesantes. Esencialmente, MS necesitó window.onload para disparar solo después de que se completó la fase init. Pero no puede controlar cuándo se activará el navegador onload, ya que está vinculado a "contenido cargado". Esto se conoce como "the window.onload problem":

incendios proceso de carga después de todo, la página se ha cargado el contenido (incluyendo imágenes y otros contenidos binario). Si su página incluye muchas imágenes, entonces puede ver un retraso notable antes de que la página se active.

Así que, inventaron su propia función "especial" para disparar en el momento justo en el ciclo de vida de su evento y lo llamaron "pageLoad". Y el truco que utilizaron para iniciar este ciclo de vida de evento personalizado fue place the call to Sys.Application.initialize() just before the closing </form> tag. El tiempo de ejecución del servidor hace esto. Los lectores astutos notarán que este truco permitió a MS resolver el problema window.onload, ya que cualquier código que ingrese en pageLoad se activará independientemente del contenido binario (w/ one rare catch for IE).

> ¿Actúan de la misma manera?

Conceptualmente sí, en la práctica no se debe en absoluto a dicho problema window.onload. La única regla es que debe poner código que interactúa con sus controles AJAX en pageLoad solamente, ya que window.onload sigue su propia trayectoria de evento.

> ¿O se llama antes que el otro?

Son completamente, 100% independientes.

> ¿O se llamará uno automáticamente y el otro no?

Ambos serán llamados si los tiene definidos.

+1

tu respuesta está completa, pero tengo otro problema con pageLoad, cuando puse en mi página encontré que se llamaba y llamaba automáticamente, nota: tengo telerik: RadAjaxManager en la página, así que esto es por un error pasando o es normal que se lo llame así "como lo llama un temporizador"? –

+1

nice write up +1 - la solución es tan ridículamente microsoft – annakata

+0

@amrelgarhy: vea mi respuesta actualizada: Paso 2) y 3) se invocan en cada devolución parcial (es decir, AJAX + UpdatePanel). –

Cuestiones relacionadas