Как вызвать действие в текущем маршрутизаторе от дочернего компонента в Ember Octane? - PullRequest
3 голосов
/ 10 января 2020

Я работаю с версией Ember Octane, я хочу вызвать действие в Route из дочернего компонента. Псевдокод выглядит следующим образом.

**Route**
export default class SomeRouter extends Route {    
    model() {
        return data;        
    }
    @action
    refreshRoute() {
        this.refresh();
    }
}

**SomerRouter.hbs** 

<ChildComponent> //Using child component here

**ChildComponent**
export default class ChildComponent extends Component { 
    @action
    revert() {
       //How do I invoke the "refreshRoute" on the SomeRouter from here?
    }
}

В методе возврата указанного выше дочернего компонента «this» относится к самому компоненту, но в предыдущей версии «this» относится к маршрутизатору, где я можно просто вызвать this.refre sh (). Так как мне добиться этого в Ember Octane. Буду очень признателен за любую помощь.

1 Ответ

3 голосов
/ 10 января 2020

Вы не делаете. Это на самом деле одна из вещей, которые все еще немного несовместимы даже с октановым числом. Поскольку связанный контекст шаблона маршрута - это Controller, а не маршрут. Таким образом, вы не можете получить доступ к действию с помощью {{this.refreshRoute}}.

. Чтобы вызвать действие на Route, лучше всего использовать send. Но для этого вам нужен контроллер и определите другое действие на контроллере:

контроллеры / некоторые. js:

export default class SomeController extends Controller {
  @action
  refreshRouteFromController() {
    this.send('refreshRoute');
  }
}

Теперь эту функцию вы можно использовать из вашего шаблона:

<ChildComponent @refresh={{this.refreshRouteFromController}}>

И затем использовать его из вашего компонента:

revert() {
   this.args.refresh();
}

Или непосредственно с кнопки:

<button {{on "click @refresh}}>...</button>
...