我很难理解Ember中的arrayController和ObjectController(至少我认为这是重点。) 我正在使用ArrayController,我需要获取一个模型并进行修改。 (以今天的模式制作,以便弄清楚一个月内有多少天)但每次都这样做:
this.get("today")
什么都没发生。从文档中可以看出它应该如何调用。
如果我查看其他示例,大多数人都使用ObjectController,所以我也尝试使用它,但我得到一个错误抱怨#each循环我正在使用需要一个ArrayController
到目前为止,这是我的代码:
//路由器
WebCalendar.Router.map(function() {
this.resource('index', {path: '/'}, function() {
this.resource("cal", {path: '/'});
this.resource("location", {path: '/location'});
this.resource("organization", {path: '/organization'});
});
});
WebCalendar.CalRoute = Ember.Route.extend({
model: function(){
return this.store.find('dates');
}
});
//模型
WebCalendar.Dates = DS.Model.extend({
today: DS.attr('date'),
month: DS.attr('date'),
year: DS.attr('date'),
daysName: DS.attr('array'),
daysInMonth: DS.attr('array')
});
WebCalendar.Dates.FIXTURES = [
{
id: 1,
today: moment().format('MMMM Do YYYY, h:mm:ss a'),
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 ]
}
];
// CalController
WebCalendar.CalController = Ember.ArrayController.extend({
getMonthDays: function(){
return this.get("today");
}.property('today')
});
// Cal Handlebars
<table>
{{#each date in controller}}
<tbody id="table">
<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 class="days">
<tr>{{getMonthDays}}</tr>
</tbody>
{{/each}}
</table>
我的问题是:
为什么this.get方法不起作用?文档:http://emberjs.com/api/classes/Ember.ArrayController.html#method_get
在这种特定情况下使用ArrayController是否正确?
为什么我不能在ObjectController中使用#each循环?
答案 0 :(得分:0)
{{getMonthDays}}
中调用了{p> {{each}}
,这意味着它是在各个Dates
对象的上下文中调用的,但是你是在ArrayController上定义它的--Ember赢了&甚至看。您在管理模型实例集合的ArrayController和单个模型实例(或者您尚未定义的控制器)之间感到困惑。
您需要 itemController 。我建议您使用文档,而不是在此总结。 getMonthDays
将是项目控制器上的一种方法。
顺便说一下,
getMonthDays: function(){
return this.get("today");
}.property('today')
通常写得更好
getMonthDays: Ember.computed.alias('today')
或
getMonthDaysBinding: 'today'