【问题标题】:Filtering Emberjs Data by Attribute Properties按属性属性过滤 Emberjs 数据
【发布时间】:2015-09-26 19:40:51
【问题描述】:

所以我有一个 ember-cli 1.13.8 应用程序,我想在其中查看没有答案的问题。目前,我可以根据属性过滤搜索。例如,我可以搜索问题的“内容”,因为这是对象的属性。

型号:

答案:

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/ 没有帮助。

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    问题是尚未加载答案与答案的关系。我的做法是让路由负责获取模型,让控制器负责显示数据。

    在您要过滤掉没有答案的问题的路径中:

    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;
      })
    })
    

    【讨论】:

    • 好的,我已经尝试实现这个解决方案,但是在模型中它得到的错误是 questions.get('answers') is undefined return questions.get('answers').then ( (answers) => {。完全错误:Error while processing route: unanwsered-questions Cannot read property 'then' of undefined TypeError: Cannot read property 'then' of undefined
    • 啊是的忘了问题是一个数组,更新了答案。让我知道这是否有效
    • 好的,模型现在似乎通​​过了,但是在控制器中它抛出了同样的错误,但是对于return question.get('answers.length') === 0;。我猜这是因为它也是一个数组?
    • 它在我实际上只是完全删除模型部分排序并将其放入控制器后才起作用。我的模特刚回到商店。感谢您的帮助!
    • 太好了,很高兴你能弄明白!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多