无法观察计算 属性

Can't observe computed property

我有一个控制器,首先对帖子进行排序,然后对它们应用过滤器。遗憾的是,当我在我的模板中使用 {{#each post in filteredPosts}} 时,它们不会实时更新。

如何实现对多列(不同方向)的排序,然后过滤并且仍然有新的和删除的帖子实时出现在列表中?

从 'ember' 导入 Ember;

export default Ember.ArrayController.extend({
  sortProperties: ['isPublished:asc', 'createdAt:desc'],
  sortedPosts: Ember.computed.sort('model', 'sortProperties'),
  filterPost: '',

  filteredPosts: function() {
    var filterText = this.get('filterPost').toLowerCase()
    return this.get('sortedPosts').filter(function(post){
      return post.get('title').toLowerCase().indexOf(filterText) > -1
    })
  }.observes('sortedPosts').property('filterPost'),

});

您计算的 属性 有两个问题。

  1. 您正在使用 .observes().property()。你只需要.property().observes() 用于在 属性 更新时进行副作用更改。
  2. 你只在看 sortedPosts,这意味着你的 属性 只会在 sortedPosts 可迭代本身发生变化时重新计算,而不是在任何内容发生变化时重新计算。因为您是按 title 属性 筛选的,所以您应该在每个实例上都观察它。您可以阅读更多相关信息 here.

您计算出的 属性 应该如下所示:

filteredPosts: function() {
    ...
}.property('sortedPosts.@each.title', 'filterPost')