2011-10-04 18 views
8

Podobna do Django {{ url }}, czy istnieje metoda lub sposób odwrócenia konkretnej trasy poprzez podanie jej nazwy i zmiennych.Odwróć trasę w Backbone js

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

Niektóre metody jak

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

Wrócimy hash: !/user/5

router.reverse('homeAction'); 

wróci hash: !/

Odpowiedz

4

Niestety nie, nie ma nic takiego wbudowany w szkielet. Chciałem czegoś podobnego i raz na dwa razy dyskutowałem o tym na liście - może nawet prośba o pociągnięcie (na razie nie pamiętam). Ale jeszcze nie zostało to zrobione.

Najlepsze, co mam wymyślić jest napisać swoje własne metody, które produkują prawidłowy ciąg trasy:

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

Jeśli musisz napisać hack, ująć go. – Leopd

5

dyskusja o odwrotnej routingu. https://github.com/documentcloud/backbone/issues/951

prosty siekać

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"