我有一个控制器,首先对帖子进行排序,然后对它们应用过滤器。遗憾的是,当我在模板中使用{{#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'),
});
您的计算属性有两个错误。
- 您同时使用
.observes()
和.property()
。您只需要.property()
。.observes()
用于在属性更新时进行副作用更改 - 您只关注
sortedPosts
,这意味着您的属性只会在sortedPosts
迭代本身发生更改时重新计算,而不会在任何内容发生更改时进行计算。因为您是通过title
属性进行筛选的,所以您应该在每个实例上都注意到这一点。你可以在这里阅读更多关于这方面的信息
你的计算属性应该是这样的:
filteredPosts: function() {
...
}.property('sortedPosts.@each.title', 'filterPost')