我遇到计算属性的问题。
这是对ArrayController
的复杂操纵。问题是,Ember试图在数据加载之前计算它。例如,部分内容是
var counts = this.getEach('hours').forEach(function(hours) {
var d = hours.find(function(_hour) {
return +(_hour.date.substring(11, 13)) === 10;
});
return d.count;
});
我收到错误,因为this.getEach('hours')
返回类似
[ Array[24], undefined ]
当加载AJAX请求时,代码就会中断。
我确定其他人之前遇到过这个问题 - 解决方案是什么?
更新:以下是我获取数据的方式。当用户点击视图中的某个月时,我会将点击的月份ID传递给我的MonthsController
。它有一个toggleMonth
方法:
App.MonthsController = Ember.ArrayController.extend({
toggleMonth: function(id) {
var month = App.Month.find(id),
index = this.indexOf(month);
if (index === -1) {
this.pushObject(month);
} else {
this.removeAt(index);
}
}
});
App.Month.find(id)
发送正确的AjAX请求+数据返回,但这可能不是填充月控制器的正确方法。
此外,这发生在IndexRoute
内(即我没有MonthsController
的单独路线。所以,我从未为{{1}指定模型挂钩或setupController
}。
答案 0 :(得分:0)
这个问题的一般方法是承诺:异步请求会立即返回一个promise,这基本上是一个值的承诺,可以在以后解决。所有Ember模特都是幕后的承诺。请参阅ember models as promises和How are Ember's Promises related to Promises in general, and specifically jQuery's Promises?
你能解释一下第一块代码的上下文吗? this
中的this.getEach('hours').forEach
是什么以及该块何时执行?