1

Today I was reading Trek's tutorial for the fourth time, hoping that I would get it this time (don't get me wrong, it is an awesome resource, but I am new to client side development in general and find that tutorial geared more toward experts). Anyway, I noticed this block of code:

<script type="text/x-handlebars" data-template-name="contributors">
  {{#each person in controller}}
    {{person.login}}
  {{/each}}
</script>

It seems obvious that here we iterate trough items in controller and refer to them as person inside each iteration. But where does the controller reference come from? Is this some special keyword that is defined by Ember and made available in the context of each view?

If controller is a special reference made available by Ember, I would like to know more about how it works. Can you point me to documentation or even Ember source where such keywords are defined so that I can learn what other references are available from inside a view and how do they work?

4

1 に答える 1

2

いいえ、これは特別なキーワードではありません。以下に説明するメソッドviewを使用するときに設定されるのプロパティです。connectOutlet

index: Ember.Route.extend({
  route: '/',
  connectOutlets: function(router){
    router.get('applicationController').connectOutlet('allContributors', [
      {login:'wycats'},
      {login:'tomdale'}
    ]);
  }
})

例の下を読むと、次のことがわかります。

コントローラーには、制御するビューでアウトレットを接続する機能があります。上記の例では、「allContributors」を引数として connectOutlet を呼び出しています。これにより、AllContributorsView のインスタンスが作成され、AllContributorsController の共有インスタンスがビューのデフォルトのレンダリング コンテキストとして設定され、アプリケーション テンプレートで {{outlet}} が表示されるポイントでビュー階層に挿入されます。2 つのオブジェクト リテラルの配列としてハード コードした 2 番目の引数は、コントローラー インスタンスのコンテンツとして設定されます。

したがって、connectOutlet方法は次のとおりです。

  • のインスタンスを作成しますAllContributorsView
  • AllContributorsControllerをビューの既定のレンダリング コンテキストとして設定します (これはcontroller、ビューのプロパティが に設定されていることを意味しApp.router.allContributorsControllerます。これは、既定のビュー レンダリング コンテキストがそのコントローラー、またはコントローラーが設定されていない場合の親ビュー コンテキストであるためです。ビュー コンテキストのソース コードを参照してください。
  • が表示される場所にビューを挿入し{{outlet}}ます
  • インスタンスの内容を設定しAllContributorsControllerます(ここでは[{login:'wycats'}, ...]

記事全体を読んでから、自分で試してみることをお勧めします。また、読むことができる Ember リソースもたくさんあります。この StackOverflow answerを参照してください。

于 2012-10-04T10:30:47.360 に答える