我对模板,视图和模型之间的关系感到困惑。
我理解视图的主要作用之一是将原始事件转换为语义事件,但我不清楚如何向视图提供必要的数据。
我有一个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
的多个实例吗? (我的理解是控制器是单例 - 每种类型中只有一个存在。)
任何建议都非常感谢。
答案 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
}
});