2011-10-04 1 views
8

Simile a Django {{ url }}, esiste un metodo o un modo per invertire un percorso particolare passandogli un nome e variabili.Invertire una rotta in Backbone js

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

Alcuni metodo come

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

sarebbe tornato l'hash: !/user/5

router.reverse('homeAction'); 

sarebbe tornato l'hash: !/

risposta

4

Purtroppo no, non c'è nulla di simile costruito a spina dorsale. Volevo qualcosa di simile e c'è stata una discussione di questo sulla lista una o due volte - forse anche una richiesta di pull (non ricordo per certo al momento). Ma non è ancora stato fatto.

Il migliore che ho è venuta in mente è quello di scrivere i miei metodi che producono la stringa percorso corretto:

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

Se devi scrivere un hack, incapsulare esso. – Leopd

5

Una discussione su di routing inverso. https://github.com/documentcloud/backbone/issues/951

un semplice mod

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"