新手问题 前台 backbone 后台 rails 中的 routes 问题

sd4399340 · 2013年12月19日 · 最后由 doitian 回复于 2013年12月20日 · 2579 次阅读

在 SO 问了这个问题,可能是没描述清楚,没人回答,在这继续问。

我就是想实现这么一种效果:

比如我有两个 controller:Users 和 Posts,我想要每个 controller 的 index action 由 rails 来渲染模板,构建页面框架,至于页面的主要内容则交给 backbone 的 View 来负责。这样,每个 controller 除了 index 同时响应 json 和 html 外,其他 action 只响应 json。比如用户访问/users#index,先由 rails 渲染页面骨架,然后 backbone 接受继续渲染内容,各个 controller 下的具体路由是由 backbone 负责的。比如/users#index/users#show/1等等,那 backbone 的 routes 应该怎么写呢?backbone 好像不支持这种 prefix,查了一些库,比如 Backbone.SubRoute,但好像不太满足需要,它所谓的 prefix 应该指的是类似/#users/index这种。

最后发现唯一的方法貌似是这样,使用 pushstate,rails 里 routes 把所有用到的 url 全部指向一个 StaticController,然后所有路由全部由前台 backbone 负责。而我只想要每个 controller 下的路由使用 backbone 来实现。。。

有可能实现吗?还是我的要求太奇葩,就应该老老实实启用 pushstate,全由前台负责路由~ 求教

每个 index 页面设置个参数,比如 <body data-backbone-route="users">. 然后在 users 页面只初始化 users router, posts 页面只初始化 posts router

你的 Users 和 Posts 可以分别做成 2 个独立的 js module, 分别配置自己的 router.

#1 楼 @doitian 是个不错的好方法

#1 楼 @doitian 还是有问题啊,感觉我没表达清楚我的意思,我说详细点

比如 backbone 里我的 users router 是

routes: {
  "": "index",
  "new": "new"
  "show/:id": "show"
}

而 posts router 的定义也是如此的,他们的路径是一样的,我的要求就是 users router 只在/usrs下起作用,posts router 只在/posts下起作用,按照您说的,我在 users 页面根据 params['controller'] 信息来 new UsersRouter,这个时候它就开始生效了,我再在 posts 页面 new PostsRouter,这个时候会冲突吧,

#4 楼 @sd4399340/usrs/posts 会重新发请求,然后招行 js,它们是不同的页面所以不会冲突

需要 登录 后方可回复, 如果你还没有账号请 注册新账号