2015-09-26 130 views
1

因此,我有一個ember-cli 1.13.8應用程序,我想查看沒有答案的問題。目前,我可以根據屬性過濾搜索。例如,我可以搜索問題的「內容」,因爲這是對象的屬性。通過屬性屬性過濾Emberjs數據

型號:

答案:

export default DS.Model.extend({ 
    ... 
    content: DS.attr(), 
    question: DS.belongsTo('question', { async: true }) 
}); 

問題:

export default DS.Model.extend({ 
    ... 
    answers: DS.hasMany('answer', { async: true }), 
}); 

例如,這個工程來查詢當前模型(問題)的屬性:

model(query) { 
return this.store.findAll('question').then(function(questions) { 
    return questions.filterBy("content", query); 
}); 
} 

但我不能基於模型屬性的屬性(在這種情況下爲長度)進行過濾。我想根據那些沒有答案的問題進行過濾。

model() { 
    return this.store.findAll('question').then(function(questions) { 
    return questions.filter(function(item, index, enumberable) { 
     return item.answers.length === 0; 
    }) 
    }); 
} 

的另一種嘗試:

model() { 
    this.store.findAll('question').filter('question', function(q) { 
    return q.get('answers.length') === 0; 
    }) 
} 

我諮詢: Emberjs filter() versus filterProperty()

似乎filterProperty()已被棄用,因此例子如: http://www.kaspertidemann.com/how-to-filter-an-array-of-records-by-a-property-value-in-ember-js/也沒有什麼幫助。

回答

3

問題是答案的答案關係還沒有被加載。我會這樣做的方式是讓路由負責提取模型並讓控制器負責顯示數據。

在路線,你想沒有答案過濾掉的問題:

model() { 
    return this.store.findAll('question').then((questions) => { 
    let promiseArray = questions.map((question) => { 
     return question.get('answer'); 
    }) 

    return Ember.RSVP.all(promiseArray); 
    }); 
} 

在控制器過濾器的車型:

filteredModels: Ember.computed('model.[]', function() { 
    return this.get('model').filter((question) => { 
    return question.get('answers.length') === 0; 
    }) 
}) 
+0

OK,我曾嘗試實施這一解決方案,但在模型它得到的錯誤,questions.get('答案')是未定義的'return questions.get('answers')。then((answers)=> {'。完全錯誤:'處理路由時出錯:unanwsered-questions Can not讀取未定義的屬性'then'TypeError:無法讀取未定義的屬性'then' – user3162553

+0

啊,是的,忘記了問題是一個數組,更新了答案。讓我知道,如果這是否有用 –

+0

好吧,模型似乎現在通過,但在控制器它拋出相同的錯誤,但對於'return question.get('answers.length')=== 0;'。我猜這是因爲它也是一個數組? – user3162553