2010-07-28 9 views
5

Mi página hasta ahora se carga una vez, y luego es todo AJAX desde allí, bebé: D. Entonces obviamente, back/forward/reload/history/bookmarking lo rompe seriamente. Estoy investigando algunas soluciones (estoy observando los plugins jQuery, también conocidos como BBQ o Address) y tengo curiosidad por cómo se implementan.Implementaciones de botón AJAX: ¿cómo funcionan?

Todo lo que me interesa seriamente es la funcionalidad Atrás/Adelante, ya que esta es una verdadera "aplicación" para el uso de tal vez 5-6 personas para ayudar a coordinar sus trabajos y de ninguna manera forma o forma "web documento". Estoy intentando evitar que los hábitos habituales de manipulación de ventanas de un usuario medio rompan mi aplicación.

Hasta ahora no he encontrado una situación en la que más de un estado pueda ingresar a otro estado, y por lo tanto mi funcionalidad de devolución ha sido bastante simple de implementar. Sin embargo, ninguna de las funciones de devolución se ha implementado utilizando la función "Atrás", simplemente mediante Cancelar, Atrás y otros botones.

Pero estoy divagando ... Hasta ahora me gusta mucho la idea de un sistema de identificador de fragmento de URL simple para permitir la funcionalidad hacia atrás y hacia adelante y realmente me gustaría evitar arrojar el código de otras personas al problema (esta es mi primera webapp y estoy tratando de hacer todo lo más dolorosamente posible para aprender).

Ok, no más digresiones ... Me dio la impresión de this article en Content with Style que podría usar un temporizador para sondear la URL de mi ventana y activar las acciones AJAX apropiadas.

Lo que me interesa saber es:

  1. Si los plugins comunes para la fijación de la espalda/rotura delante de AJAX utiliza un método similar y si no, qué métodos utilizan?
  2. ¿Cuáles son los pros. y contras del método de votación, así como cualquiera de los métodos alternativos.
  3. ¿Podría implementar una versión simple de estos métodos que logre mis objetivos? (decir debajo de 150 líneas).
  4. ¿Merece la pena hacerlo yo mismo? ¿Voy a aprender algo valioso si implemento esto? ¿Será mi versión (en teoría) más simple realmente menos código que un complemento completo?
+1

No estoy seguro acerca de la verdadera pregunta, pero si fuera usted, solo usaría el complemento, no reinvente la rueda. Apuesto a que el (los) programador (es) que pasó el tiempo escribiendo el plugin pensaban "Diablos, esto apesta, pero al menos les ahorraré a todos el dolor de escribir esto", o simplemente estaban a bordo;) – Ben

+0

Sí, lo siento, cuanto más escribía, supongo que cuanto más entendía mi propia pregunta. La esencia de esto es 1) ¿Cómo se rompe la funcionalidad back/forward/reload/bookmark/history por AJAX corregida por los plugins/métodos comunes desde la perspectiva de alguien que quiere aprender seriamente la programación web. 2) ¿Cuáles son las ventajas de cada método? 3) ¿Puedo implementar mi propia versión que incluye solo la funcionalidad básica que deseo de forma no arbitraria? Ok, bueno, quizás esto no aclare nada, ¡pero qué diablos! –

Respuesta

2

Si los plugins comunes para la fijación de la espalda/rotura delante de AJAX utiliza un método similar y si no, qué métodos utilizan?

Utilizan tanto el sondeo como el evento hashchange.

¿Cuáles son los pros. y contras del método de votación, así como cualquiera de los métodos alternativos.

  • Pros de sondeo: No todos los navegadores soportan hashchange por lo que es multi-navegador
  • contras de sondeo: Más costoso en términos de rendimiento

que pudieran poner en práctica una versión simple de estos métodos que logrará mis objetivos? (decir debajo de 150 líneas).

Si está escribiendo la aplicación solo para 5 personas, podría forzarlas a usar un navegador moderno que admita el evento hashchange. A continuación, puede escribir la detección de cambios de hash en tan sólo 2-3 líneas :)

window.onhashchange = function(event) { 
    var url = event.newURL; 
    // do something with new url 
}; 

¿Merece la pena hacerlo yo mismo? ¿Voy a aprender algo valioso si implemento esto? ¿Será mi versión (en teoría) más simple realmente menos código que un complemento completo?

Sí, ver arriba. Podrías escribir una implementación mucho mejor en muy pocas líneas de código. Por ejemplo, Rails usa un router para enviar solicitudes a los controladores. Las rutas se definen como:

 
"/signup"   -> (UsersController, new) 
"/user/(id)/photos" -> (PhotosController, index) 

Se podría definir su propio API de enrutamiento para registrar rutas y sus funciones de controlador/objetos en JavaScript y hacer mucho más cosas frías que pueden ser posibles con los plugins existentes, sino sólo limitadas por su imaginación :)

+0

Estoy muy intrigado por hashchange. Lamentablemente, esta aplicación se utilizará principalmente en un entorno corporativo y, por lo tanto, me veo obligado a codificar en el lcd, que en este caso es IE7. De un google rápido parece que hashchange IS es compatible con IE8, pero tal vez no es IE7. ¡Sería divertido tratar de convencer a TI para una corporación multinacional de que es hora de un nuevo IE! –

Cuestiones relacionadas