试图找出应该是一个简单的解决方案:filterBy使用hasMany id数组记录。
我有一个模型this.store.createRecord('conversation', {user: model})
.save()
.then(function(conversation) {
model.get('conversations').addObject(conversation);
});
,Language
hasMany
s,反之亦然。从Provider
的集合中,我需要Provider
甚至filterBy('language', [1,2])
。
(我不能做一个language.get('providers'),因为我从另一个协会获得了Providers的集合。)
filterBy('language', 2)
答案 0 :(得分:0)
filterBy
基于单个属性的过滤器,但您可以使用filter
本身,并将其传递给选择函数:
filteredProviders: function() {
let providers = this.get('providers'); // some providers to select from
let languages = this.get('languages'); // array of languages to select
// Does a provider have one of the languages we're looking for?
function providerHasLanguage(provider) {
return provider.get('languages') .
some(language => languages.indexOf(language) !== -1;
}
return providers . filter(providerHasLanguage);
}.property('providers', 'languages')
答案 1 :(得分:0)
所以一些redditors帮助我,我从那里开始工作。似乎没有本机解决方案,但迭代遍历每个数组并从匹配对象渲染新数组。
// app/utils/where.js
let where = function(sourceArray, property, language_id) {
let destArray = [];
sourceArray.forEach(function(obj) {
obj.get(property).forEach(function(property_object) {
let id = parseInt(property_object.get('id'));
if (language_id === id) {
destArray.push(obj);
}
});
});
return destArray;
}
export default where;
及其用法:
// in a component
import where from 'path';
let filteredProviders = where(providers,
'languages', language_id);
需要进行少量修改以适应多个language_ids数组的过滤。