ember.js - transitiontoroute - ember transition to route with id
AplicaciĆ³n Javascript del lado del cliente-enrutamiento url sin etiqueta hash (4)
En Ember.js (versión 1.0.0rc3) esto se puede lograr utilizando la API de ubicación de Ember.js :
App.Router.reopen({
location: ''history''
});
Y luego configurar el servidor web para redirigir el tráfico a la aplicación Ember.
Para dar un ejemplo concreto aquí hay un archivo .htaccess
Apache básico que redirige el tráfico a la aplicación Ember ubicada en index.html:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.html#$1 [L]
Como señala Alex White , Apache 2.2.16 y posteriores admiten una configuración más simple para redireccionar el tráfico a un solo objetivo:
FallbackResource /index.html
FallbackResource es parte del módulo mod_dir
y requiere que se AllowOverride Indexes
.
Asegúrese de probar las rutas de la aplicación a fondo. Un error común es Uncaught SyntaxError: Unexpected token <
, que es causado por el uso de enlaces relativos a los archivos CSS y JS. Prefórmalos con una /
marca para hacerlos absolutos.
Esta funcionalidad no es compatible con Internet Explorer <10 .
Estoy trabajando en una nueva aplicación del lado del cliente con la última versión de Ember.js. Hay una sola página PHP que construye los scripts, css, archivos de plantilla, etc. y la entrega en index.php. Estoy usando una directiva htaccess para que todas las solicitudes se vuelvan a escribir en /index.php. El PHP solo está ahí para empaquetar convenientemente el Javascript, en lo que a mí respecta.
Actualmente, las rutas en el navegador se ven así y funcionan bien.
/#/about
/#/favorites
/#/etc
/#/posts/5/edit
Sin embargo, me gustaría que se vean así, que no funcionan bien.
/about
/favorites
/etc
/posts/5/edit
El mismo código de cliente exacto todavía se entrega con la segunda opción, pero siempre llega al controlador de ruta de índice. He visto aplicaciones en el lado del cliente que lo hacían antes. ¿Qué me estoy perdiendo? ¿Debo tener manejadores de ruta coincidentes en el lado de PHP?
Editar: Estoy buscando una respuesta específica de cómo abordar esto. La web está llena de información de "oh, simplemente haz esto" que deja a todos los demás rascándose la cabeza.
Mejor que un RewriteRule, puedes usar esto para Apache 2.2.16+:
FallbackResource /index.html
en su configuración de Apache para que RewriteRule no necesite ejecutarse para cada solicitud. Esto asegurará que cada ruta en su aplicación de brasa se encuentre en el archivo index.html.
Sí, necesitaría tener rutas que coincidan en el lado del servidor. El hecho de no usar la etiqueta hash forzará también la recarga de la página, ralentizando las cosas y probablemente causando más actualización de la necesaria.
Además, deberá pasar el estado a través del servidor o utilizar alguna variante del almacenamiento local del navegador.
@Pascal: no está hablando de actualizaciones de página reales, sino más bien del uso del history
de Ember ( location: ''history''
).
Para responder a su pregunta, deberá configurar su .htaccess para publicar el contenido de la forma habitual en JavaScript. Una vez que sus URL estén configuradas para cargar su aplicación, Ember se encargará de todo por usted, como de costumbre, desde la URL.