Ember 2. Обработка двух или более свойств только в одном вычисляемом свойстве. Как фильтровать по тексту поиска и категории

Мой код здесь:

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));
})

Как обрабатывать два свойства в одном и том же вычисляемом свойстве?


person Community    schedule 21.03.2017    source источник


Ответы (1)


Вам нужно ввести search:'', в контроллер и передать его компоненту сообщений {{my-posts posts=posts category=category search=search}}, а ваш clickCategory должен сбросить свойство поиска при нажатии категории

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

Это гарантирует, что вы следуете стратегии Data Down Actions Up. twiddle

Редактировать:

  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'));
    }),
person Ember Freak    schedule 21.03.2017
comment
Уважаемый @kumkanillam, спасибо за ваш ответ. Другой человек порекомендовал мне это: discuss.emberjs.com/t/ Что вы думаете? - person ; 21.03.2017
comment
Сочетая мой и дискуссионный вклад, я думаю, вы можете получить то, что хотите, посмотрите на это крутить. - person Ember Freak; 21.03.2017
comment
В вашем последнем twiddle (ember-twiddle.com/efc7d4256c64714cee8ea259699bdf2c) щелчок по категории не показывает сообщения. - person ; 21.03.2017
comment
Посмотрите на этот обновленный twiddle, который исправляет ember-twiddle.com/ Я обновил причину в ответе - person Ember Freak; 21.03.2017
comment
большое спасибо. могу я спросить вас, почему posts.[] и categoryPosts.[]?? - person ; 21.03.2017
comment
В вашем случае это не требуется, это будет полезно, когда мы добавляем/удаляем записи из массива, это снова вызовет расчет вычисляемого свойства. хорошо объяснено здесь guides.emberjs.com/ v2.12.0/объектная модель/ - person Ember Freak; 21.03.2017