Не можем ли мы поставить задачу параллельного выполнения ember в средство получения компонентов glimmer, которое отслеживает аргументы компонентов - PullRequest
0 голосов
/ 13 мая 2019

- когда задача параллельного выполнения ember называется средством получения компонентов glimmer, она выполняется в бесконечном цикле.

import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { task } from 'ember-concurrency';

export default class UserTableComponent extends Component {
  @service store;
  @tracked users;

  get taskStatus() {
    let params = {
      'account_id':this.args.account,
      'page':this.args.page
    }
    this.getUsersTask.perform(params);

  }


  @task(function*(params) {
      let recordsWithMeta = yield this.store.query('user', params);
      this.users= recordsWithMeta.toArray();
    }) getUsersTask;

}

user-table.hbs

<table>
  <thead>
    <tr>
      <th>
        <div class="first">Name</div>
      </th>
    </tr>
  </thead>
  <tbody>
    {{#if this.taskStatus.isRunning}}
    <tr>
      <td >
        <div class="h-64">
          {{ui-kit/loader}}
        </div>
      </td>
    </tr>
    {{else}}
    {{#each @users as |user|}}

    {{/each}}
    {{/if}}
  </tbody>
</table>

Вышеупомянутый компонент вызывается где-тов шаблоне и при передаче аккаунта и динамической страницы.

<UserTable 
  @account={{this.account}}
  @page={{this.page}}
  >          
</UserTable>

Примечание: он работает в бесконечном цикле.

1 Ответ

0 голосов
/ 16 мая 2019

Я нашел две вещи для изменения. Но не уверен, что их будет достаточно, чтобы заставить его работать.

Первая точка,

{{#each @users as |user|}} эквивалентно this.args.users. Но массив users определен для компонента. Так что его нужно изменить на {{#each this.users as |user|}}

Вторая точка,

taskStatus ничего не возвращает. Так что {{#if this.taskStatus.isRunning}} будет false каждый раз. Правильная проверка будет {{#if this.getUsersTask.isRunning}}, потому что isRunning является свойством задачи.
Но когда вы изменили на {{#if this.getUsersTask.isRunning}}, он не будет работать, так как никто не вызывает getUserTask. Я думаю, что вы можете инициировать эту задачу в одном из хуков жизненного цикла (например, didInsertElement).

...