开发者

Reverse a route in Backbone js

Similar to Django's {{ url }}, is there a method or way to reverse a particular route by passing it a name and variables.

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

Some method like

router.reverse('开发者_C百科editUserAction', '5');

Would return the hash: !/user/5

router.reverse('homeAction');

Would return the hash: !/


A discussion about reverse routing. https://github.com/documentcloud/backbone/issues/951

a simple hack

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"


Unfortunately no, there isn't anything like this built in to backbone. I've wanted something similar and there has been discussion of this on the list once or twice - maybe even a pull request (don't remember for sure at the moment). But it has not yet been done.

The best that I've come up with is to write my own methods that produce the correct route string:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜