在Backbone js中反转路由

dlr*_*ust 8 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
    }
});
Run Code Online (Sandbox Code Playgroud)

有些方法可以

router.reverse('editUserAction', '5');
Run Code Online (Sandbox Code Playgroud)

将返回哈希: !/user/5

router.reverse('homeAction');
Run Code Online (Sandbox Code Playgroud)

将返回哈希: !/

fxp*_*fxp 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"
Run Code Online (Sandbox Code Playgroud)


Der*_*ley 4

不幸的是,没有,主干中没有内置这样的东西。我想要类似的东西,并且在列表上已经对此进行过一两次讨论 - 甚至可能是一个拉取请求(目前不太记得)。但这还没有完成。

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

function userEditPath(userId){
  return "/user/" + userId + "/edit";
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要编写一个 hack,请将其封装起来。 (5认同)