0

新しいルーター システムのコントローラーを理解しようとしています。モデルを装飾し、非永続的な状態をビュー/テンプレートに提示してレンダリングするために存在することを理解しています。また、ルート名から各コントローラーの単一コピーをインスタンス化してセットアップするために Ember ルーターが使用する規則を理解しています。しかし、それはコントローラーの複数のコピーを持つべきではないということですか?

これが私の使用例です:複雑な非永続的なアイテムごとの状態(さまざまなレベルの折りたたまれた/表示されたネスト、さまざまな編集モードなど)を持つアイテムのネストされたリストのセットがあります。私はこれがビューに属しているとは思わないし、シングルトンコントローラに保持するには(ネストのために)複雑すぎるので、1つのビューインスタンスごとに1つのコントローラインスタンスを持つことを計画していた(ただし、すべて同じコントローラとビュークラス) )。これは音ですか?

第二に、より単純な質問です。Ember ルーターがインスタンス化するコントローラーにアクセスするにはどうすればよいですか? 以前は可能でしApp.get('router.postController')たが、機能しなくなりました。

4

1 に答える 1

1

最初の質問

すべてのコントローラーがシングルトンであるとは限りません。Ember.js が非シングルトン コントローラーを作成する場合があります。

1 つのケースは、ヘルパーで使用itemControllerする場合です。{{each}}

{{#each model itemController="post"}}
  <!-- template here -->
{{/each}}

これにより、ループ内のApp.PostControllerすべてのアイテムに対して新しいインスタンスが作成されます。post

もう 1 つのケースは、{{render}}ヘルパーを使用してモデルを渡す場合です。

{{render "post" firstPost}}
{{render "post" secondPost}}

App.PostControllerこれにより、ごとに個別のインスタンスが作成されます{{render}}

2 番目の質問

どこからアクセスしたいかによって異なります。

ルートから:

this.controllerFor("post");

別のコントローラーから:

App.CommentController = Ember.ObjectController.extend({
  needs: ['post'],
  test: function() {
    return this.get('controllers.post');  // this returns the post controller
  }
});

詳細はこちら: http://emberjs.com/guides/controllers/dependencies-between-controllers/

ビューから:

this.get('controller');
于 2013-04-11T07:31:19.810 に答える