Как сделать компоненты визуализированными через {{component}} независимыми от помощника - PullRequest
0 голосов
/ 30 января 2020

У меня есть несколько экземпляров компонента (назовем его <Row />) с данным шаблоном:

    {{component @resultComponentName result=@result}}

Я звоню <Row /> компонент из <Terminal /> компонента, например:

* Компонент 1008 *

<Terminal /> имеет свойство:

@tracked resultComponentName;

, которое обрабатывается в действии confirm() в <Terminal /> компонент:

if (cmd.resultComponentName) {
  this.resultComponentName = cmd.resultComponentName;
} else {
  this.resultComponentName = 'result-component';
}

, где cmd является некоторым Ember Модель со свойством:

  @tracked resultComponentName = 'other-result';

теперь я хочу изменить @resultComponentName только в одном экземпляре, но при изменении @resultComponentName все компоненты <Row /> повторного рендеринга.

Как я могу предотвратить такое поведение и сделать каждый экземпляр независимым? Заранее спасибо!

1 Ответ

1 голос
/ 30 января 2020

Ваша проблема в том, что @tracked resultComponentName; существует в вашем Terminal компоненте, и поэтому только один раз для всего списка.

Теперь я не уверен, как ваш @rows связан с cmd здесь, потому что это интересный вопрос. Если каждая строка является cmd, вы можете просто сделать это:

<Row @result={{row.result}} @confirm={{fn this.confirm}} @resultComponentName={{row.resultComponentName}}/>

Если она отличается, это полностью зависит от того, как вы хотите отобразить, для каких строк вы хотите, какие resultComponentName и где вы хотите сохранить это Информация. Возможно, вы даже захотите переместить этот логин в сам компонент Row.

...