0

我的代码在这里:

https://ember-twiddle.com/b894cec64a1d78a71e15b642d512cfcf

我需要使用这个计算属性:“postsFiltered”与类别和搜索,但是当我在 clickCategory() 上更改类别时,我需要重置搜索文本(如果存在)。

但是计算属性已经被调用了吗?不?

同样,当我搜索需要将类别重置为空的内容时。

postsFiltered: Ember.computed('category', 'search', function () {

var posts = this.get('posts');
var search = this.get('search');

console.log('computed postsFiltered() with category: ' + this.get('category') + ', search: ' + search);
return posts.filter((item) => item['categoryId'] === this.get('category'));

// or this when I search, but I don't know how to do one or the other:
// return posts.filter((item) => item['name'].includes(search));
})

如何处理同一个计算属性中的两个属性?

4

1 回答 1

1

您需要search:'',在控制器中引入,并将其传递给帖子组件{{my-posts posts=posts category=category search=search}},并且您clickCategory应该在点击类别时重置搜索属性

clickCategory(categoryId) {
   this.set('category', categoryId);
   this.set('search','');
}

这将确保您遵循 Data Down Actions Up 策略。玩弄

编辑:

  1. Ember.computed.filterBy这里最后一个参数是一个值而不是属性名
  2. Ember.computed.filter我们也不能使用它,因为我们还需要再包含一个依赖项category
  3. 所以最终实现了我们自己的计算属性而不是内置宏,
    categoryPosts: Ember.computed('posts.[]','category', function(){
      return this.get('posts').filter(post => post.categoryId === this.get('category'));
    }),
于 2017-03-21T05:00:18.393 回答