Con Backbone, ¿puedo obtener el nombre de la ruta actual? Sé cómo vincularme con los eventos de cambio de ruta, pero me gustaría poder determinar la ruta actual en otros momentos, entre cambios.
backbone.js
Drew Dara-Abrams
fuente
fuente
Respuestas:
Si ha instanciado un enrutador en su aplicación, la siguiente línea devuelve el fragmento actual:
De la documentación de Backbone.js :
"El [...] historial sirve como un enrutador global (por trama) para manejar eventos de cambio de hash o pushState, hacer coincidir la ruta apropiada y activar devoluciones de llamada. Nunca debería tener que crear uno de estos, debe usar la referencia a Backbone.history que se creará para usted automáticamente si utiliza enrutadores con rutas. [...] "
Si necesita el nombre de la función vinculada a ese fragmento, puede hacer algo como esto dentro del alcance de su enrutador:
O así desde fuera de su enrutador:
fuente
Backbone.history.getFragment()
, porqueBackbone.history.fragment
es una propiedad privada oculta.La respuesta de Robert es interesante, pero lamentablemente solo funcionará si el hash es exactamente como se define en la ruta. Si, por ejemplo, tiene una ruta
user(/:uid)
, no coincidirá siBackbone.history.fragment
es uno"user"
o"user/1"
ambos (ambos son los dos casos de uso más obvios para dicha ruta). En otras palabras, solo encontrará el nombre de devolución de llamada apropiado si el hash es exactamente"user(/:uid)"
(muy poco probable).Como necesitaba esta funcionalidad, extendí la función
Backbone.Router
con unacurrent
función que reutiliza parte del código que usan los objetos Historial y Enrutador para hacer coincidir el fragmento actual con las Rutas definidas para activar la devolución de llamada apropiada. Para mi caso de uso, toma el parámetro opcionalroute
, que si se establece en algo verdadero devolverá el nombre de la función correspondiente definida para la ruta. De lo contrario, devolverá el fragmento hash actual deBackbone.History.fragment
.Puede agregar el código a su extensión existente donde inicializa y configura el enrutador Backbone.
Estoy seguro de que se podrían hacer algunas mejoras, pero esta es una buena manera de comenzar. Además, es fácil crear esta funcionalidad sin extender el objeto Ruta. Hice esto porque era la forma más conveniente para mi configuración.
Todavía no lo he probado completamente, así que avíseme si algo va mal.
ACTUALIZACIÓN 25/04/2013
Hice algunos cambios en la función, por lo que en lugar de devolver el nombre de devolución de llamada hash o ruta, devuelvo un objeto con fragmento, parámetros y ruta para que pueda acceder a todos los datos de la ruta actual, al igual que lo haría desde la ruta. evento.
Puedes ver los cambios a continuación:
Vea el código anterior para más comentarios y explicaciones, se ven casi iguales.
fuente
_.find
función comothis
, eliminando así la necesidad de laRouter
variable (@DanAbramov ya lo hizo).Marionette.AppRouter
, ampliar su router con la función anterior, pero sustitutoRouter.appRoutes
paraRouter.routes
.Para obtener la ruta de llamada (o url) del controlador de ruta llamado, puede obtenerla marcando
Llegué aquí en busca de esta respuesta, así que supongo que debería dejar lo que he encontrado.
fuente
Si usa la configuración raíz para el enrutador, también puede incluirla para obtener el fragmento 'real'.
fuente
Aquí hay una versión un poco más detallada (o, según su gusto, más legible) de la respuesta de Simon :
fuente
Si observa el origen del
Router
, verá que cuando el enrutador activa el evento diciendo que algo cambia, pasa el nombre con él como "ruta: nombre".http://documentcloud.github.com/backbone/docs/backbone.html#section-84
Siempre puede conectar el evento "ruta" en el enrutador y almacenarlo para obtener la ruta actual.
fuente
route
evento sitrigger
no lo estátrue
(recomendado y predeterminado).