ember.js 如何从Ember Octane中的子组件调用当前路由器中的操作?

qgelzfjb  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(164)

我正在使用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中实现这一点呢?

gcxthw6b

gcxthw6b1#

你不需要。这实际上是其中一个仍然有点不一致的东西,即使是辛烷。因为路由模板的绑定上下文是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>

相关问题