无法观察计算属性

时间:2015-03-25 22:10:11

标签: ember.js handlebars.js ember-cli

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

如何在多个列(不同方向)上实现排序,然后过滤AND仍然会在列表中显示新的和已删除的帖子?

从'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 个答案:

答案 0 :(得分:3)

您的计算属性有两个错误。

  1. 您同时使用.observes().property()。您只需要.property().observes()用于在属性更新时进行副作用更改。
  2. 您只是在关注sortedPosts,这意味着您的属性只会在sortedPosts迭代本身更改时重新计算,而不会在任何内容更改时重新计算。因为您要按title属性进行过滤,所以您应该在每个实例上都看到它。您可以阅读有关此here
  3. 的更多信息

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

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