findAll со свойством, определенным родительским - PullRequest
1 голос
/ 09 марта 2019

2 компонента, 1 родитель, 1 ребенок.Родитель - это список с кнопками.Пользователь нажимает кнопку, и дочерний редактор становится видимым, а переменная listType передается дочернему элементу от родителя.

Я хочу, чтобы свойство делало findAll в дочернем элементе на основе свойства listType, например,

listType:null,
records: this.get('store').findAll(this.get('listType'));

Проблема заключается в том, что первый дочерний редактор в inits listType не определен и требует времени для передачи данных от родительского.Как мне вычислить записи на основе listType, чтобы он мог динамически изменять записи, когда другой родительский список выбирается из родительского списка, и не падать, когда свойство listType не определено в init?

Это может показаться немного странным, но у меня есть 20 различных типов списков, и возможность вычисления записей таким способом избавит меня от необходимости создавать дополнительные 40 файлов для сохранения и удаления требуемых типов моделей.

1 Ответ

1 голос
/ 09 марта 2019

Похоже, вам нужно вычисляемое свойство в вашем дочернем компоненте, способное реагировать на отсутствующий listType.

import Component from '@ember/component';
import { computed } from '@ember/object';
import { inject as service } from '@ember/service';

export default Component.extend({
  store: service(),
  listType: null,
  records: computed('listType', function () {
    if (!this.listType) {
      return null;
    }

    return this.store.findAll(this.listType);
  }),
});

records собирается вернуть обещание, и вам придется обработать его таким образом в своем шаблоне. Я лично использую этот метод https://stackoverflow.com/a/40180704/796999.

Другая опция может передавать records в дочерний компонент вместо того, чтобы искать их там. Вы бы создали свойство компьютера таким же образом и просто изменили бы свой родительский шаблон, чтобы иметь {{child-component records=records}}.

...