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

p4tfgftt  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(167)

我是Ember.js的新手,我有一些问题需要理解它的哲学。我知道 * 动作向上,数据向下 *,但在真实的生活中,假设我在my-gallery组件中初始化了Fotorama(我不知道这是否可以,但我在didInsertElement方法中完成了它)。这个库有它自己的事件。它们在普通JS中看起来像这样:

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

或:

$('.fotorama').on('fotorama:show', function () {});

但我觉得在Ember中,这些应该以某种方式Map到组件中的动作。我的问题是:怎么做?2我需要在那些动作中激发一些动作(被另一个组件或者路由器捕获)。3所以我想应该是这样的:this.sendAction('actionName', actionParams);

svujldwt

svujldwt1#

您可以保留组件引用来调用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')
}

如果我们找到一个更好的答案这个问题。我会很高兴地删除我的答案。

q8l4jmvw

q8l4jmvw2#

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

const App = Ember.Application.extend({
  customEvents: {
    foo: 'foo',
  },
});

然后从第三方代码触发它:

<a href="..." onclick="$(this).trigger('foo'); return false;">

然后,在组件中,根据文档编写该事件的处理程序:

export default Ember.Component.extend({
  foo(event) {
    console.warn('event happened', event);
  },
});

请参阅:

相关问题