2016-09-29 173 views
0

首先使用計算性能,我目前的版本:在頁面加載

Ember  : 2.8.1 
Ember Data : 2.8.1 
jQuery  : 3.1.1 

我使用的查詢參數中的控制器。如果用戶轉到assignments?strm=1292,將調用strm,計算得出term,和計算filteredClusters。但是,在初始頁面加載時,filteredClusters將爲空(例如,我使用瀏覽器導航到/assignments?strm=1292)。只有在調用selectStrm動作來更新strm查詢參數後,filteredClusters纔會開始返回結果。

assignments指數控制列表如下:

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    queryParams: ['strm', 'cluster', 'title'], 
    strm: null, 
    cluster: null, 
    title: null, 

    term: Ember.computed('strm', function() { 
    var strm = this.get('strm'); 
    var terms = this.get('model.terms'); 

    return strm ? terms.filterBy('strm', strm)[0] : null; 
    }), 

    filteredClusters: Ember.computed('term', 'model', function() { 
    var term = this.get('term'); 
    var clusters = this.get('model.clusters'); 

    if(term) { 
     return clusters.filter((cluster, index, clusters) => { 
     var terms = cluster.get('terms'); 

     return terms.mapBy('strm').includes(term.get('strm')); 
     }); 
    } else { 
     return clusters; 
    } 
    }), 

    actions: { 
    selectStrm: function(strms) { 
     var strm = strms[0]; 
     this.set('strm', strm); 
    } 
    } 
}); 

我能做些什麼讓filteredClusters加載在初始頁面加載?

感謝您的任何和所有信息。

+0

嘗試在routes/assignments.js中定義'queryParams:{strm:{refreshModel:true},cluster:{refreshModel:true},title:{refreshModel:true}}' – kumkanillam

回答

1

可能你的問題是filteredClusters有錯誤的依賴關係。如果model可用,是否確定每個羣集上的model.clustersterms已經加載?是異步關係嗎?

可能您需要一個CP依賴項,如[email protected]@each.strm。然而,這將不工作,因爲不支持雙@each

現在讓我們假設你有三個型號:assignmentclusterterm

分配

clusters: DS.hasMany('cluster') 

集羣

terms: DS.hasMany('term') 

長期

strm: DS.attr() 

現在該怎麼擺脫這個雙@each?答案很簡單:對返回所有集羣中的所有條款的分配的CP:

分配

terms: Ember.computed('[email protected]', { 
    get() { 
    return get(this, 'clusters') 
     .map(c => get(c, 'terms')) 
     .reduce((a,b) => [...a, ...b], []); 
    } 
}), 

,現在你可以使用[email protected]作爲filteredClusters依賴的關鍵。這將迫使CP在羣集或術語加載時重新計算。