5

我正在使用 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”指的是组件本身,但在之前版本的 ember 中,“this”指的是路由器,我可以简单地调用 this.refresh()。那么我如何在 Ember Octane 中实现这一点。非常感谢任何帮助。

4

1 回答 1

5

你没有。这实际上是即使使用辛烷值仍然有点不一致的事情之一。因为路由模板的绑定上下文是Controller,而不是路由。因此,您无法使用 访问该操作{{this.refreshRoute}}

调用行动的Route最佳方式是 uzilize 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>
于 2020-01-10T15:58:06.463 回答