js -过滤模型的所有属性

Ember.js - Filtering all properties of a model

本文关键字:属性 模型 过滤 js      更新时间:2023-09-26

我试图通过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"
  }
]
<<p> 过滤器/strong>:
 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'))?

在所有Ember Object中getProperties方法可用。

如果这不是一个烬对象,那么你可以使用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;
    })    
  })