Emberjs组件动作

时间:2015-05-26 13:45:02

标签: javascript ember.js components

我正在尝试使用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"}}

有没有办法在没有这种连接的情况下从组件向路由器/控制器发送动作?

1 个答案:

答案 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