1

私は次のテンプレートを持っています

{{#each photo in photos}}
    {{#view App.PhotoView}}
        <img {{bindAttr src="photo.cover_image_source" data-photo-id="photo.id"}} />
    {{/view}}
{{/each}}

PhotoView で、クリック イベントがトリガーされたときに関連付けられている写真モデルにアクセスするにはどうすればよいですか?

App.PhotoView = Ember.View.extend({
    click: function(event) {
        // how do I retrieve the model ????
    }
})

ありがとう!!

4

2 に答える 2

2

これは、実際には を使用してはるかに少ないコードで実現できますitemViewClass

{{#each photos itemViewClass="App.PhotoView"}}
  <img {{bindAttr src="cover_image_source"}} />
{{/each}}

各ビューは、コンテキストを photos 配列内のアイテムに自動的に設定します。

App.PhotoView = Ember.View.extend({
  click: function(event) {
    var photo = this.get("context");
  }
})
于 2013-05-05T04:49:27.477 に答える
1

モデルはクリック関数ハンドラーに自動的に渡されないため、ビューで直接アクセスすることはできませんが、@BradleyPriest が言及したように itemViewClass を使用するか、ビューのコントローラーにフックしてイベントをキャッチすることで、別の方法でモデルを取得できます。- ここでは、その概念を示す jsfiddle - http://jsfiddle.net/intuitivepixel/AywvW/27/

編集:jsfiddleに一致するように回答を編集しました

テンプレート

<script type="text/x-handlebars" data-template-name="index">
{{#each photo in photos}}
  {{#view App.PhotoView contentBinding="photo"}}
    <a {{action "photoClicked" photo}}>
      <img {{bindAttr src="photo.cover_image_source"}} />
    </a>
  {{/view}}
{{/each}}
</script>

意見

App.PhotoView = Ember.View.extend({
  content: null
});

コントローラ

App.IndexController = Ember.ArrayController.extend({
  photoClicked: function(event) {
    alert(event.title);
  }
});

それが役に立てば幸い

于 2013-05-04T22:29:20.320 に答える