Как вызвать действие в текущем маршрутизаторе из дочернего компонента в 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>