我正在試圖定義一個計算過的屬性,它由一個已過濾的hasMany
關係組成。當我循環訪問PromiseManyArray
的項目時,當試圖訪問我想要過濾的屬性時,我得到undefined
。在稍後調用此計算屬性時,一切正常。ember.js,在控制器中過濾PromiseManyArray
這是我的控制器代碼的簡化版本:
export default Ember.Controller.extend({
availableModules: function() {
let thisModule = this.get('model')
console.log(thisModule.get('library.modules')) // This logs <DS.PromiseManyArray:ember604>
// loop over siblings
return thisModule.get('library.modules').filter(mod => {
// mod.classification is undefined
return mod.get('classification') !== 'basis'
})
}.property('model')
})
對於Module
模型中,我們可以假設,它具有classification
屬性,並且它屬於一個Library
對象,並且Library
模型hasMany
模塊。
我已經試過這樣的事情,它正確地記錄屬性classification
,但我不知道怎麼回事情,這樣的模板可以對其進行渲染。
availableModules: function() {
let thisModule = this.get('model')
thisModule.get('library.modules').then(mods => {
mods.forEach(mod => {
console.log(mod.get('classification'))
})
})
}.property('model')
所以,問題似乎是PromiseManyArray.filter
方法裏面,找到的對象的屬性尚未得到解決......我怎樣才能建立一個承諾,將返回所有過濾的對象,一旦這些已經解決?我不知道該如何解決這個問題。謝謝。
嘿所以我會做的是,而不是獲取控制器上的異步關係,而不是在其中一個模型鉤子。因此,在afterModel鉤子中獲取它們,將其設置到路由本身,然後在設置控制器中將async屬性設置到控制器上。然後在控制器中,您可以計算以過濾您的異步關係。這樣你就可以將異步關係加載到商店中,並能夠在等待加載的時候訪問加載模板。 –
@布洛姆菲爾德,幫助,但我不喜歡它太多。我添加了一個答案。謝謝。 – bgusach