ajax请求期间的计算属性

时间:2013-07-26 22:26:41

标签: 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;
});

我收到错误,因为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 }。

1 个答案:

答案 0 :(得分:0)

这个问题的一般方法是承诺:异步请求会立即返回一个promise,这基本上是一个值的承诺,可以在以后解决。所有Ember模特都是幕后的承诺。请参阅ember models as promisesHow are Ember's Promises related to Promises in general, and specifically jQuery's Promises?

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

相关问题