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