2013-07-26 133 views
1

我遇到了計算屬性的問題。ajax請求期間的計算屬性

這是一個複雜的操作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; 
}); 

因爲AJAX請求加載時this.getEach('hours')回報像

[ Array[24], undefined ] 

我得到一個錯誤,所以代碼中斷。

我確信其他人已經遇到過這個 - 有什麼解決方案?

更新:以下是我如何獲取數據。當用戶在視圖中點擊一個月時,我將點擊的月份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所以沒有單獨的路線,我從來沒有指定MonthsController模型鉤或setupController

+0

你可以顯示,你是如何發送ajax和填充小時數組? –

+0

如果您沒有在模型鉤子中返回承諾,則會發生這種情況。你的路線是什麼樣子的? –

+0

@DarshanSawardekar更新,謝謝你們。 –

回答

0

這個問題的一般方法是承諾。:異步請求立即返回一個承諾,這是基本的價值承諾,這可以在以後的路線來解決。所有的灰燼模型是幕後的承諾。見ember models as promises,並How are Ember's Promises related to Promises in general, and specifically jQuery's Promises?

你能不能解釋一下第一的背景下代碼塊?什麼是thisthis.getEach('hours').forEach和什麼時候執行該塊?

+0

這是存儲模型的數組控制器。我認爲@DarshanSawardekar在[這個答案](http:// stackoverflow。COM /問題/ 17891718 /何燦I-編程方式附加刪除的模型到一個控制器/ 17894539#17894539)。我遇到的麻煩是知道我需要自己做多少事情,以及Ember爲我做了多少事情。我知道Ember模型是承諾,但我不知道是否必須調用'.then',或者如果Ember在承諾解決之前不知道重新計算財產。 –