如何在多个余烬视图及其关联对象之间建立关联?

时间:2013-03-12 21:15:20

标签: ember.js views controllers

我对模板,视图和模型之间的关系感到困惑。

我理解视图的主要作用之一是将原始事件转换为语义事件,但我不清楚如何向视图提供必要的数据。

我有一个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 个答案:

答案 0 :(得分: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
  }
});