私はEmber> = 2.13.xを使用しています。Ember.js 2、transitionTo最初のレベルのルートで複数の動的セグメントを使用
別のルートに行くには、ルートアクションからtransitionTo
を使用する必要があります。ここで
はデモ残り火-責めです:https://ember-twiddle.com/3cbb806f31f8d71a6c414452f4fc9ded
私はこのような状況を持っている:
router.json:
Router.map(function() {
this.route('home', {path: '/'});
this.route('categories', {path: 'categories'});
this.route('category', {path: ':category_id'});
this.route('posts', {path: 'posts'});
this.route('post', {path: ':category_id/:post_id'}); //I have multiple synamic segments in here
});
ルート/をapplication.js:
actions: {
goToPost() {
let post = this.store.findRecord('post', 1);
this.transitionTo('post', post);
}
}
ルート/ post.js:
model(params) {
return this.store.findRecord('post', params.id);
},
serialize(model) {
console.log('model in serialize():', model);
return { category_id: model.get('category.id'), post_id: model.id };
}
テンプレート/をapplication.hbs:
<button type="button" {{action 'goToPost'}}>GoToPost with action (transitionTo)</button>
だから私はすべてが期待どおりに動作しますクリックしたとき。
私はアプリケーションアクションでモデルを取得し、次にthis.transitionTo('post', post);
を使用します。
私のpost
ルートでは、私はserialize()
を持っていますが、これは、動的セグメントが存在する場合にURLの合成に使用しています。
私の質問:私はそれを正しい方法で使用していますか? this.transitionTo('post', post.category.id, post.id);
とpost
ルートでmodel()
は(DBまたはストアから)モデルを取得しましょう:私はこのようなものを使用することはできませんなぜ
?
また、this.transitionTo('post', {category_id: post.category.id, post_id: post.id});
を使用しようとしましたが、明らかにpost
ルートmodel()
には、オブジェクトが既に存在すると考えられるため、何もロードされません。
したがって、この問題はserialize()
メソッドでのみ解決できます。 それは正しい方法ですか?
カテゴリルートには何がありますか? – sheriffderek
それは重要ですか? –