无法观察计算属性



我有一个控制器,首先对帖子进行排序,然后对它们应用过滤器。遗憾的是,当我在模板中使用{{#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属性进行筛选的,所以您应该在每个实例上都注意到这一点。你可以在这里阅读更多关于这方面的信息

你的计算属性应该是这样的:

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

最新更新