with transitiontoroute route emberjs ember create component aftermodel ember.js url-routing client-side javascript-framework

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.