0

これらのルートを定義しました:

this.resource('projects', function() {
    this.resource('project', { path: ':project_id'}, function() {
        this.route('details');
        this.route('members');
    });     
});

私が考えたのは、慣例により project.details ルートは「project/details」テンプレートを探すということでした。それはしますが、奇妙なことに、正しいモデルを取得できません。http://jsbin.com/ELaxigE/19/editを参照

「プロジェクト」テンプレートを作成すると、「プロジェクト/詳細」テンプレートを提供する代わりに機能します。http://jsbin.com/ELaxigE/21/editを参照

何が起こっているのか混乱しています。誰か説明できますか?

4

2 に答える 2

0

与えられたルート。モデル フックが定義されておらず、次で終わる動的セグメントがある場合_id:

this.route('edit', { path: ':user_id' });

これにより、次のようなルートが生成されます。

App.EditRoute = Ember.Route.extend({
  model: function(params) {
    return App.User.find(params.id);
  }
});

あなたの場合、動的にセグメント化された唯一のルートはprojectです:project_id

this.resource('project', { path: ':project_id'}, function() { ... });

したがって、detailsmembersは単なる通常のルートであるため、 . はありませんmodel

テンプレートproject/detailsprojectに変更すると、次の理由で機能します。

に遷移すると、 が宣言されているためproject.details、最初にprojectroute に遷移しますthis.resource('project'...)。これは動的にセグメント化されたルートであるため、App.Projectインスタンスが返され、テンプレートが this にバインドされてレンダリングされますmodel

この後、子ルートproject.detailsが遷移しますが、今回はテンプレートproject.detailsが存在しません。したがって、何もレンダリングされません。

解決策は@alexspellerの回答、または:

this.resource('project', function() {
    this.route('details', { path: 'details/:project_id' });
    this.route('members', { path: 'members/:project_id' });
});

お役に立てば幸いです。

于 2013-08-17T21:49:13.773 に答える