[英]Trigger route action from component
我有一个组件,我想在其上触发路由级别操作,以便我可以转换到不同的路由。
App = Ember.Application.create();
App.Router.map(function() {
});
App.IndexRoute = Ember.Route.extend({
actions: {
complete: function() {
// This never happens :(
console.log('Triggered complete!');
}
}
});
App.MyAreaComponent = Ember.Component.extend({
actions: {
clickMyButton: function() {
console.log('Triggering complete action.');
// Attempting to trigger App.IndexRoute.actions.complete here
this.sendAction('complete');
}
}
});
我想要完成的是当 MyAreaComponent 的“clickMyButton”操作被触发时,它将触发 IndexRoute 的“完成”操作。
我已经设置了一个 jsbin 来演示我的问题:
http://emberjs.jsbin.com/wivuyike/1/edit
如果 controller 没有在其操作 object 中实现与操作同名的方法,操作将被发送到路由器,当前活动的叶子路由将有机会处理操作。
因此,考虑到这一点,我希望组件会说“让我们检查我的 controller,看看它是否有一个名为‘完成’的动作。没有?好的,让我们检查我的路线 (IndexRoute),看看它是否有一个名为‘完成’的动作'. 是吗?好的,触发它!
我唯一能想到的是,由于组件的设置方式,没有将IndexRoute设置为组件的路由,所以冒泡的动作只是停在了controller。
我不确定从这里到哪里去 go。 我是否需要做一些特别的事情来让我的组件知道我的 IndexRoute?
这是您更新的样本 - http://emberjs.jsbin.com/wivuyike/3/edit
因此,从组件中你需要让自己冒出来,这可以通过以下方式完成
this.sendAction('clickMyButton');
然后在使用组件时,将需要触发的路径操作分配给组件操作,如下所示
{{my-area clickMyButton='complete'}}
在路线旁边的模板中:
{{component-name refresh=(route-action "refresh")}}
然后在组件中你可以调用它:
this.get('refresh')();
通过在组件中创建另一个动作,可以从组件模板中调用一个动作。
所以今天它节省了我的时间。
如果您在操作中没有执行任何其他操作,除了向路径发送操作之外,您可以尝试直接从模板执行此操作:
<button {{action "complete" target="route"}}>Complete</button>
(未经测试的代码,请确保先测试!)
...否则看起来你应该这样做:
this.sendAction('action', 'complete');
代替:
this.sendAction('complete');
所以看起来你只是错过了问题中发布的代码中的第一个参数。 参考
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.