在Backbone js中反转路由

时间:2011-10-04 23:41:20

标签: backbone.js

与Django的{{ url }}类似,是否有通过传递名称和变量来反转特定路线的方法或方法。

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

某种方法,如

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

会返回哈希:!/user/5

router.reverse('homeAction');

会返回哈希:!/

2 个答案:

答案 0 :(得分:5)

关于反向路由的讨论。 https://github.com/documentcloud/backbone/issues/951

一个简单的黑客

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"

答案 1 :(得分:4)

不幸的是,没有这样的东西内置于骨干网。我想要类似的东西,已经在列表上讨论过一次或两次 - 甚至可能是拉动请求(目前还不记得)。但它还没有完成。

我提出的最好的方法是编写自己的方法来生成正确的路由字符串:

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