Как вызвать действие в текущем маршрутизаторе из дочернего компонента в Ember Octane?

Я работаю с версией 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" относится к самому компоненту, но в предыдущей версии ember "this" относится к маршрутизатору, где я мог просто вызвать this.refresh(). Итак, как мне добиться этого в Ember Octane. Был бы очень признателен за любую помощь.

1 ответ

Решение

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

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

контроллеры / some.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>
Другие вопросы по тегам