我试图通过Ember.js中的输入字段过滤模型的所有属性。如果在其中一个模型属性中找到文本字段输入,我想返回过滤后的结果。
我已经有了一个可行的解决方案,但我想知道是否有更好的方法来过滤所有属性,而不是一个接一个地获取它们。我已经做了很多研究,但我找不到更好的方法来解决这个问题。以下是相关代码:
型号:
[
{
"source": "this is a source",
"title": "this is a title",
"message":"this is a message"
},
{
"source": "this is a source too",
"title": "this is a title too",
"message":"this is a message too"
}
]
过滤:
export default Ember.Component.extend({
filterText: "", //Input field value
filteredArticles: Ember.computed('filterText', function () {
var filter = this.get('filterText').toLowerCase();
return this.get('model').filter(function (item) {
return item.get('title').toLowerCase().indexOf(filter) !== -1 ||
item.get('message').toLowerCase().indexOf(filter) !== -1 ||
item.get('source').toLowerCase().indexOf(filter) !== -1
});
})
});
有没有办法通过一个命令获取所有属性(例如 item.get(' allProperties'))?
答案 0 :(得分:4)
所有Ember对象getProperties
方法都可用。
如果这不是Ember对象,那么您可以使用Ember.getProperties
但是这些方法再次返回具有指定属性的对象,而不是您正在寻找的值。因此,只有在model
对象中处理两个或三个属性时,您的方法才是正确的。如果您认为您将获得更多属性或动态,您将向模型对象添加更多属性,那么您可以在filter
回调中进行对象迭代。
filterdText: Ember.computed('filterText',function(){
var filter = this.get('filterText').toLowerCase();
return this.get('model').filter((item,index) =>{
for(var key in item){
if( item.hasOwnProperty(key)){
if(item[key].toLowerCase().indexOf(filter) !== -1){
return true
}
}
}
return false;
})
})