2

リストを反復処理しておりentries、リスト内の各エントリの内容を表示したいと考えていますが、それぞれのエントリのルート上にある場合のみです。

すなわち - ルート上にあるとき/entries/2

* link to entry 1
* link to entry 2

  content for entry 2

* link to entry 3

残念ながら、ループ{{outlet}}内では使用できないようです。{{#each entry}}

最初に、ルートisActive内で trueに設定しようとしsetupControllerましたが、テンプレート内でそれを確認しましたが、ナビゲートするときにそのフラグを削除する良い方法があるようには見えません/entries/3(完全deactivateに離れた場合にのみ機能します) 。setupController の反対はありますか?/entries/:entry_idを参照してください。詳細については。

Emberでこれを行う最良の方法は何ですか?

4

2 に答える 2

4

itemControllerwithを使用して、現在のプロパティが現在のモデルと等しい{{each}}ことを確認するアイテム コントローラーで計算されたプロパティを設定できます。modelApp.EntryRoute

したがって、次のルート設定があります。

App.Router.map(function() {
    this.resource('entries', { path: '/'}, function() {
      this.resource('entry', { path: ':entry_id' });
    });
});

次のテンプレート:

<script type="text/x-handlebars" id="entries">
  {{#each controller itemController="entryItem"}}
    {{#linkTo "entry" this}}{{name}}{{/linkTo}} <br />
    {{#if isSelected}}
      {{details}} <br /><br />
    {{/if}}
  {{/each}}

いいえ、コントローラーを作成し、現在のルート モデル === の場合に true を返すApp.EntryItem計算プロパティを追加する必要はありません。isSelectedmodel

このようなもの:

App.EntryItemController = Em.ObjectController.extend({
  needs: 'entry',

  isSelected: function() {
    return this.get('controllers.entry.model') === this.get('model');
  }.property('controllers.entry.model')
});

上記のすべてを適用したフィドルを次に示します。

http://jsfiddle.net/teddyzeenny/T2EyK/1/

于 2013-05-12T16:40:16.427 に答える