Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Emberjs组件操作_Javascript_Ember.js_Components - Fatal编程技术网

Javascript Emberjs组件操作

Javascript Emberjs组件操作,javascript,ember.js,components,Javascript,Ember.js,Components,我正在尝试使用Emberjs组件。我在行动上遇到了麻烦 这里是我的组件: export default Ember.Component.extend({ actions: { openObject: function (id) { this.sendAction('openObject', id); } }, ... 在这里,我的控制器,也在路由中创建了相同的操作 export default Ember.Control

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

是否有某种方法可以在没有这种连接的情况下将操作从组件发送到路由器/控制器?

您的component.js文件应该类似于:

export default Ember.Component.extend({
  pickedObject: 'openObjectHandler',
  actions: {
    openObject: function (data) {
      this.sendAction('pickedObject', data);
    }
  },
...
当启动openObject操作时,组件将向上冒泡该操作作为“openObjectHandler”,传递数据。因此,控制器需要实现一个名为“openObjectHandler”的操作处理程序

表达这一点的另一种方式是在模板中使用参数时将其传递给web组件,如下所示(将优先于component.js中的PickeObject):

在当前路由层次结构中处于活动状态的控制器中处理类似这样的操作,例如,应用程序控制器,例如:

actions: {
  openObjectHandler: function(data) {
    // do something here
    console.log('openObjectHandler: '+data);
  }
}
下面是我正在研究的一个JSBin,它使用这种技术将一个操作冒泡到控制器:

“targetObject”是一个指向父视图控制器的属性,您可以在该对象上发送,但据我所知,这不是一个好方法,因为它有点扼杀了组件应该是自包含的概念-如果代码的其他地方需要使用相同的组件,但“openObject”呢你应该做点别的吗?扼杀了灵活性。你应该依靠行动来激发灵感。我将在稍后发布一个示例(现在吃午餐)也在您的控制器示例中自定义?我已设法理解它,非常感谢!太多了,你花时间陪我真是太好了!
actions: {
  openObjectHandler: function(data) {
    // do something here
    console.log('openObjectHandler: '+data);
  }
}