Emberjs 组件操作
Emberjs components actions
我正在尝试使用 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"}}
有没有什么方法可以在没有这种连接的情况下将动作从组件发送到 router/controller?
您的 component.js 文件应该类似于:
export default Ember.Component.extend({
pickedObject: 'openObjectHandler',
actions: {
openObject: function (data) {
this.sendAction('pickedObject', data);
}
},
...
当 openObject 动作被触发时,组件会将动作向上冒泡为 'openObjectHandler',传入数据。所以你的控制器需要实现一个名为 'openObjectHandler'.
的动作处理程序
另一种表达方式是在您的模板中使用它时将参数传递给 Web 组件(在 component.js 中将优先于 pickedObject):
{{my-example pickedObject='otherOpenObjectHandler}}
在当前路由层次结构中活动的控制器中处理这样的操作,例如您的应用程序控制器:
actions: {
openObjectHandler: function(data) {
// do something here
console.log('openObjectHandler: '+data);
}
}
这是我正在研究的一个 JSBin,它使用这种技术将操作冒泡到控制器:
JSBin Demo
我正在尝试使用 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"}}
有没有什么方法可以在没有这种连接的情况下将动作从组件发送到 router/controller?
您的 component.js 文件应该类似于:
export default Ember.Component.extend({
pickedObject: 'openObjectHandler',
actions: {
openObject: function (data) {
this.sendAction('pickedObject', data);
}
},
...
当 openObject 动作被触发时,组件会将动作向上冒泡为 'openObjectHandler',传入数据。所以你的控制器需要实现一个名为 'openObjectHandler'.
的动作处理程序另一种表达方式是在您的模板中使用它时将参数传递给 Web 组件(在 component.js 中将优先于 pickedObject):
{{my-example pickedObject='otherOpenObjectHandler}}
在当前路由层次结构中活动的控制器中处理这样的操作,例如您的应用程序控制器:
actions: {
openObjectHandler: function(data) {
// do something here
console.log('openObjectHandler: '+data);
}
}
这是我正在研究的一个 JSBin,它使用这种技术将操作冒泡到控制器:
JSBin Demo