2013-03-12 42 views
0

我对模板,视图和模型之间的关系感到困惑。如何在多个花括号视图及其关联对象之间建立关联?

我知道一个视图的主要角色之一是将原始事件转换为语义事件,但我不清楚应该如何向视图提供必要的数据。

我有一个calendar_month模板。关联的CalendarMonth对象具有一个CalendarWeek对象的数组,其中每个对象都有一个CalendarDay对象的数组。 (这些不是模型,因为它们不会持久 - 它们是在CalendarMonthRoute中生成的对象)。

所以我的模板看起来像这样:

<table> 
    {{#each week in weeks}} 
    <tr> 
     {{#each day in week.days}} 
     <td> 
      {{#view App.CalendarDayView}} 
      {{ day.monthDay }} 
      {{/view}} 
     </td> 
     {{/each}} 
    </tr> 
    {{/each}} 
</table> 

我想每个CalendarDayView来响应点击,但我不知道怎么去访问特定的日历天对象,它应该与每个相应的CalendarDayView相关联。

App.CalendarDayView = Ember.View.extend({ 
    click: function(evt) { 
    // do something here... but how do I know which day was clicked? 
    } 
}); 

我认为这很可能我没有正确设置它。每个CalendarDay视图是否都有自己关联的CalendarDayController实例,为相应的CalendarDay对象提供代理访问?如果是这样,那么会不会需要CalendarDayController的多个实例? (我的理解是,控制器是单身 - 每种类型都应该存在。)

任何意见非常赞赏。

回答

1

这可以通过使用一个动作助手,使用它可以很容易地通过上下文对象来处理方法可以轻松实现:

<table> 
    {{#each week in weeks}} 
    <tr> 
     {{#each day in week.days}} 
     <td> 
      {{#view App.CalendarDayView}} 
      <a {{action yourAction day target="view"> {{ day.monthDay }} </a> 
      {{/view}} 
     </td> 
     {{/each}} 
    </tr> 
    {{/each}} 
</table> 

以及相应的视图:

Vollipop.CalendarDayView = Ember.View.extend({ 
    yourAction : function(day){ 
    // perform your work on the day 
    } 
}); 
+0

的感谢!所以好像一个视图甚至没有必要 – doublea 2013-03-13 02:25:10

+0

如果你的唯一目的是处理这些动作,你也可以把它放在parentView中。这一切都取决于:-) – mavilein 2013-03-13 08:52:07

+0

动作的默认目标是控制器。您可以删除'target =“视图”'并将yourAction放置在CalendarDayController中 – Rudi 2013-03-13 09:15:15