1

假设我有两个自定义元素:a 和 b。a 包含另一个可以单击的元素,我想在发生这种情况时触发自定义事件。然后应该由元素 b 捕获该自定义事件。

我可以在元素 a 中使用 this.trigger,但是元素 b 中的 this.on 没有捕获事件(这似乎合乎逻辑,因为它不是在 b 上触发的)。

那么:我可以在元素 b 中检索元素 a 以在元素 b 中执行类似“elementA.on()”的操作吗?

基本上,我想要 RiotControl 之类的功能,但不存储数据,因为我只想在我的用例中触发模式而不存储任何内容。

我可能会退回到 jQuery 并触发和侦听文档上的事件,但这真的是一个好方法吗?

4

2 回答 2

3

您可以创建一个共享的 observable,例如:

var eventBus = riot.observable();

当您安装元素时,您可以将其作为选项传递:

riot.mount('elementa', { eventBus: eventBus })
riot.mount('elementb', { eventBus: eventBus })

然后他们可以监听并触发同一个 observable:

this.opts.eventBus.trigger('openModal', ...maybeSomeOptions);
this.opts.eventBus.on('openModal', function(...maybeSomeOptions) {});

免责声明:riotjs 对我来说是新的

于 2015-11-14T00:32:46.120 回答
0

我解决这个问题的方法是使用 mixin 自动将相同的 Observable 包含到多个标签中。

// mixins.js
let ObservableMixin = {
    observable: riot.observable()
};

然后在我希望共享 observable 存在的任何 .tag 文件中,我只需调用。

// Any .tag file
this.mixin(ObservableMixin);
...
this.observable.trigger('eventName', { optional: options });

有关 mixins 的更多信息,请查看:Riot Mixins

于 2016-10-14T23:36:00.010 回答