我正在尝试使用Emberjs组件。我偶然发现了行动的麻烦。
这是我的组件:
export default Ember.Component.extend({
actions: {
openObject: function (id) {
this.sendAction('openObject', id);
}
},
...
在我的控制器中,我也在路线中创建了相同的动作。
export default Ember.Controller.extend(
{
actions: {
openObject: function (id) {
self.transitionToRoute('objects.bc', id);
}
}
}
);
我需要的只是通过组件的动作进行转换。
只有当我以这种方式连接控制器动作和组件动作时才能工作:
{{bc-table openObject="openObject"}}
有没有办法在没有这种连接的情况下从组件向路由器/控制器发送动作?
答案 0 :(得分:2)
你的component.js文件应该是这样的:
export default Ember.Component.extend({
pickedObject: 'openObjectHandler',
actions: {
openObject: function (data) {
this.sendAction('pickedObject', data);
}
},
...
当触发openObject操作时,组件将向上冒泡动作为'openObjectHandler',传入数据。因此,您的控制器需要实现一个名为“openObjectHandler”的动作处理程序。
另一种表达方式是在你的模板中使用它时将参数传递给web组件(这将优先于component.js中的selectedObject):
{{my-example pickedObject='otherOpenObjectHandler}}
在当前路由层次结构中处于活动状态的控制器中处理此类操作,例如应用程序控制器,例如:
actions: {
openObjectHandler: function(data) {
// do something here
console.log('openObjectHandler: '+data);
}
}
这是我正在研究的一个JSBin,它使用这种技术将动作冒泡到控制器:
JSBin Demo