2011-10-04 14 views
8

Similar a Django's {{ url }}, hay un método o una forma de revertir una ruta en particular pasándole un nombre y variables.Invertir una ruta en Backbone js

// example Router 
var router = Backbone.Router.extend({ 
    routes: { 
     '!/user/:user_id': 'editUserAction', 
     '!/': 'homeAction' 
    }, 
    editUserAction(user_id) { 
     // edit user view 
    }, 
    homeAction() { 
     // home view 
    } 
}); 

algún método como

router.reverse('editUserAction', '5'); 

devolvería la almohadilla: !/user/5

router.reverse('homeAction'); 

regresarían el hash: !/

Respuesta

4

Desafortunadamente no, no hay nada como esto construido en la red troncal. He deseado algo similar y ha habido una discusión sobre esto en la lista una o dos veces, tal vez incluso una solicitud de extracción (no lo recuerdo con certeza en este momento). Pero aún no se ha hecho.

Lo mejor que me ha ocurrido con es escribir mis propios métodos que producen la cadena ruta correcta:

function userEditPath(userId){ 
    return "/user/" + userId + "/edit"; 
} 
+5

Si tienes que escribir un hack, encapsular. – Leopd

5

Una discusión acerca del enrutamiento inverso. https://github.com/documentcloud/backbone/issues/951

un simple truco

var personRoutes = { 
    list: "/persons", 
    show: "/persons/:id", 
    edit: "/persons/:id/edit" 
} 

var getRoute = function(obj, route, routeDefinitions){ 
    return routeDefinitions[route].replace(":id", obj.id); 
} 

var person = new Model({id: 1}); 
var route = getRoute(person, "edit", personRoutes); // => "/persons/1/edit"