私は現在、パス要素の1つが動的であるネストされたルートを機能させるのに苦労しています。それが私が達成したいシナリオです:
このページには、プロジェクトの説明が含まれています。ページ内には、さまざまなビューを選択するためのタブ メニューがあります。URLにも反映されるはずです。だから私は次のような異なる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'));
}
})
})
})
})