Ember.js ajax请求期间计算的属性

Ember.js ajax请求期间计算的属性,ember.js,Ember.js,我在计算财产方面遇到了麻烦 这是对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; });

我在计算财产方面遇到了麻烦

这是对
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传递给我的
monthController
。它有一个
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请求+数据返回,但这可能不是填充months控制器的正确方法


此外,这也发生在
IndexRoute
(也就是说,我没有为
monthcontroller
指定单独的路由。因此,我从不为
monthcontroller
指定模型挂钩或
setupController
。解决此问题的一般方法是承诺:异步请求立即返回承诺,这基本上是一个价值承诺,可以在以后解决所有余烬模型都是幕后的承诺。看到了吗


你能解释一下第一段代码的上下文吗?在
this.getEach('hours')中
this
是什么.forEach
以及该块何时执行?

您能展示一下您是如何发送ajax和填充小时数组的吗?如果您没有在模型挂钩中返回承诺,就会发生这种情况。您的路线是什么样子的?@DarshanSawardekar更新的,谢谢各位。我想这可能会解决问题。您可能需要提供更多信息n关于模型的小时字段。另一方面,计算属性会随着它们所依赖的内容的更新而更新。也就是说,如果arraycontroller为空,则代码应该能够处理该状态,如果突然加载了项,则应该能够处理该状态。如果不指定setupController,则默认行为为设置从路由到控制器提供的模型。如果未指定路由,则需要通过其他方式将模型分配给控制器(您可能正在这样做)。展示这一点会有所帮助。存储模型的是阵列控制器。我想@DarshanSawardekar回答了中的问题。我遇到的麻烦是知道我需要自己做多少,以及Ember为我做了多少。我知道Ember模型是承诺,但我不知道我是否必须调用
。然后
,或者Ember是否知道在承诺得到解决之前,我们不会重新计算财产。