【发布时间】:2014-10-25 12:15:17
【问题描述】:
我正在使用 Emberjs,但我仍然无法完全了解如何从模板中绑定控制器。
我有一个模型:date_model.js
WebCalendar.Dates = DS.Model.extend({
today: DS.attr('date'),
monthNumber: function(){
var today = this.get('today');
return today.getMonth();
}.property('today'),
month: DS.attr('date'),
year: DS.attr('date'),
daysName: DS.attr('array'),
daysInMonth: DS.attr('array'),
weeks: DS.attr('number')
});
WebCalendar.Dates.FIXTURES = [
{
id: 1,
today: new Date(),
month: moment().format('MMM'),
year: moment().format('YYYY'),
daysName: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
daysInMonth: [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ],
weeks: new Array(6)
}
];
和两个控制器差不多:) cal_controller.js:
WebCalendar.CalController = Ember.ArrayController.extend({
itemController: 'days'
});
days_controller.js
WebCalendar.DaysController = Ember.ObjectController.extend({
getMonthDays: function(){
var monthNumber = this.get("monthNumber");
var daysInMonth = this.get("daysInMonth");
var totDayInMonth = daysInMonth[monthNumber];
var days = [];
for( i = 1; i < totDayInMonth; i++){
days.push(i);
}
return days;
}.property('monthNumber')
});
还有一个模板,cal.hbs:
<table>
{{#each date in controller}}
<tr id="year">
<td>{{date.year}}</td>
</tr>
<tr>
<td id="prev-month"> Prev </td>
<td id="month">{{date.month}}</td>
<td id="next-month"> Next </td>
</tr>
<tr id="days-of-week">
{{#each date.daysName}}
<td>{{this}}</td>
{{/each}}
</tr>
{{/each}}
<tbody>
{{#each date in controller}}
{{#each date.weeks}}
<tr class="days">{{this}}
{{#each days itemController="days"}}
<td>{{days.getMonthDays}} Days</td>
{{/each}}
</tr>
{{/each}}
{{/each}}
</tbody>
</table>
所以我需要遍历我的周模型 (6),然后再次循环思考我的日子并打印它们
我的想法是先在模板中循环,然后在控制器中执行日期,然后在控制器中执行天数,但是 [当然,我需要指定的不是默认的 cal 控制器而是天数控制器,这就是我在 webCal.DaysController 中执行天数的原因 但它抱怨不是一个数组......
错误:
Assertion failed: The value that #each loops over must be an Array.
You passed WebCalendar.DaysController
为什么会这样? 为什么如果我说只是在控制器中的几天不会抱怨不是数组控制器??
【问题讨论】:
-
错误信息是否说明了哪个#each 循环是有问题的循环?我认为问题在于您在控制器中定义 itemController 而不是在应该使用 days 控制器的特定循环上“内联”。试试 {{#each days itemController="days"}}
-
不,它没有说是哪个循环,但我猜是因为它抱怨 WebCalendar.DaysController 的第一天。无论如何,我尝试了您的建议,现在它不再抱怨了,但它甚至不显示我在#each days 中放入的任何内容
标签: javascript ember.js