我目前很难找到一个嵌套的工作路线,其中一个路径元素是动态的。这就是我想要实现的场景:
该页面包含项目的描述。页面内是一个选项卡菜单,用于选择不同的视图。这也应该反映在 URL 中。所以我想要不同的网址,例如:
url#/project1/info
url#/project1/status
url#/project1/...
为了不重复:project
参数,我添加了一个嵌套项目路由,它不是叶子,但只负责项目本身的序列化/反序列化。只要我使用初始项目,一切正常。但它可能发生,我想从一个项目链接到另一个项目。这意味着 URL 应该更改url#/project1/info -> url#/project2/info
,因此视图也应该更改以显示有关 project2 的信息。
听起来很简单。但是,当我使用操作助手链接到 project2 时,不会调用项目路由的反序列化方法
<a {{action changeProject context="App.project2" href=true}}>Go to project 2</a>
我想那是因为我已经处于信息状态。但是,我如何传播上下文更改?一个简化的案例你可以在小提琴http://jsfiddle.net/jocsch/HYbZj/30/中找到或者直接查看http://jsfiddle.net/jocsch/HYbZj/30/show/#/project1/info
Router: Ember.Router.extend({
enableLogging: true,
root: Ember.Route.extend({
changeProject: Em.State.transitionTo('project.info'),
index: Ember.Route.extend({
route: '/',
}),
project: Ember.Route.extend({
route: '/:project',
deserialize: function(router, params) {
var proj = App.get(params['project']);
router.get("applicationController").set("content", proj);
return proj;
},
serialize: function(router, context) {
return {project: context.id};
},
index: Ember.Route.extend({
route: '/',
redirectsTo: 'info'
}),
info: Ember.Route.extend({
route: '/info',
connectOutlets: function(router) {
var ctrl = router.get('applicationController');
ctrl.connectOutlet('project', ctrl.get('content'));
}
})
})
})
})