我已经openModal在应用程序路由上定义了操作.我试图在一个组件中调用此操作.
如果我使用语法进行动作冒泡:
{{my-component openModal="openModal"}}
然后一切都按预期工作,我可以使用触发此操作this.sendAction("openModal").
但是,我不确定如何使用新的闭包语法获得相同的结果:
{{my-component openModal=(action "openModal")}}
在这种情况下,Ember抱怨openModal控制器上没有定义任何操作.我是否必须在每个使用的控制器上定义此操作my-component?有没有办法以某种方式使用target选项告诉Ember这个动作是在路线上定义的?可以在单个组件中混合使用冒泡和闭包语法吗?
我正在使用Ember 2.0 beta 1.
And*_*aus 22
在Ember 2.1或2.2或2.3或2.4或2.5或2.6或2.7中某处引入可路由组件之前,不可能从路径传递关闭动作.
目前,您只能将关闭操作从控制器传递到子组件.
UPD: Miko Paderes暗示可以使用插件:https://github.com/dockyard/ember-route-action-helper
Ed *_*d . 12
试试这个:
{{my-component openModal=(action send "openModal")}}
Run Code Online (Sandbox Code Playgroud)
...使用控制器上的send方法.
我不能说我完全理解它,因为第二个参数send是,context但它仍然在路线中正确地传递了我的行动的其他参数.我目前正在使用2.4.5版本.
您可以通过控制器代理它们来发送关闭操作到路由.这适用于任何支持关闭操作的Ember版本.唯一需要注意的是,动作名称必须与控制器和路线不同.
例如,给定此模板:
{{foo-component myAction=(action 'foo')}}
Run Code Online (Sandbox Code Playgroud)
您需要foo在控制器上执行操作,该操作可以代理路径:
proxyFooTo: 'fooBar',
actions: {
foo(context) {
this.send('proxyFooTo', context);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在路线上
actions: {
fooBar(context) { ... handle fooBar ... }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5586 次 |
| 最近记录: |