如何从 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?
}
}

在上述子组件的 revert 方法中,"this"指的是组件本身,但在以前版本的余烬中,"this"指的是路由器,我可以简单地调用 this.refresh((。那么我如何在Ember Octane中实现这一目标。真的很感激任何帮助。

你没有。这实际上是即使与辛烷值仍然有点不一致的事情之一。因为路由模板的绑定上下文是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>

最新更新