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
如何在ember.js组件中处理自定义事件?_Ember.js - Fatal编程技术网

如何在ember.js组件中处理自定义事件?

如何在ember.js组件中处理自定义事件?,ember.js,Ember.js,我是新加入Ember.js的,我有一些问题需要理解它的原理。我知道动作向上,数据向下,但在现实生活中,假设我已经在我的gallery组件中初始化了(我不知道这是否正确,但我是在didInsertElement方法中初始化的)。此库有自己的事件。在普通JS中,它们可能看起来像这样: $('.fotorama').on('fotorama:ready', function (e, fotorama) {}); 或: 但我觉得在余烬中,这些应该以某种方式映射到组件中的操作。 我的问题是:怎么做?我需

我是新加入Ember.js的,我有一些问题需要理解它的原理。我知道动作向上,数据向下,但在现实生活中,假设我已经在我的gallery组件中初始化了(我不知道这是否正确,但我是在
didInsertElement
方法中初始化的)。此库有自己的事件。在普通JS中,它们可能看起来像这样:

$('.fotorama').on('fotorama:ready', function (e, fotorama) {});
或:

但我觉得在余烬中,这些应该以某种方式映射到组件中的操作。
我的问题是:怎么做?我需要在这些动作中触发一些动作(被其他组件或路由器捕获)。所以我认为应该是这样的:
this.sendAction('actionName',actionParams)

您可以保留组件引用以调用sendAction方法

didInsertElement(){
 this._super(...arguments);
 var _this=this;
 this.$('.fotorama').on('fotorama:show', function () {
  _this.sendAction('actionName', actionParams);
 });
}
willDestroyElement(){
 this._super(...arguments);
 this.$('.fotorama').off('fotorama:show')
}

如果我们能找到更好的答案。我很乐意删除我的答案。

我也有类似的问题。我需要与我的ember应用程序进行第三方库对话,以便在我的ember应用程序中注册自定义事件:

const App = Ember.Application.extend({
  customEvents: {
    foo: 'foo',
  },
});
然后从第三方代码触发:

<a href="..." onclick="$(this).trigger('foo'); return false;">
请参阅:
*

*

您能提供文档或更多信息吗?为什么不推荐这种方法?didInsertElement()也是附加事件侦听器的好地方。这对于自定义事件或其他没有内置事件处理程序的浏览器事件特别有用。在处理jquery插件时,我通常编写这样的代码。但是对于ember的人来说,大多数jquery插件都不能很好地使用ember。所以我们需要自己写……我只是添加了
不推荐的方法
,以避免获得更多的反对票@锁可能会给我们一些启发。大多数jquery插件都不能很好地使用ember。所以我们需要自己写。绝对地但是当我开始编写我们自己的实现时,我觉得我正在重新发明轮子,这是不对的。你的答案加上在{my gallery}中添加actionName='actionName',对我来说很有用(我错过了那部分)。为什么你在答案的结尾加上
这个答案有用吗?
。如果有帮助的话,他们会简单地投票支持这篇文章,这就是它的目的。我想是噪音。我以前从来没有问过。只是想看看发生了什么。
<a href="..." onclick="$(this).trigger('foo'); return false;">
export default Ember.Component.extend({
  foo(event) {
    console.warn('event happened', event);
  },
});