gpt4 book ai didi

javascript - 在服务中使用 Ember 事件来发布/订阅事件

转载 作者:行者123 更新时间:2023-12-02 21:23:26 24 4
gpt4 key购买 nike

我在我的应用程序中使用事件总线服务,如下所示;

import Evented from '@ember/object/evented';
import Service from '@ember/service';

export default Service.extend(Evented, {
publish: function(){
return this.trigger.apply(this, arguments);
},
subscribe: function(){
this.on.apply(this, arguments);
},
unsubscribe: function(){
this.off.apply(this, arguments);
}
})

现在我从我的应用程序中使用它,如下所示。我有一个事件混合,有点像下面的包装器;

export default Mixin.create({
events: service('event-bus'),
subscribe: function(eventName, callback){
this.get('events').on(eventName, this, callback);
},
unsubscribe: function(eventName, callback){
this.get('events').off(eventName, this, callback);
}
})

另外,为了在组件中实际使用它,我有;

import events from '../mixins/event-mixin';
export default Component.extend (events, {

eventsToListen: function(){
return [{
eventName: "enableBtn",
callBack: $..proxy(this.enableBtn, this);
}]
}
}

我在这里展示了相关代码的几部分。虽然我理解观察者模式,但实际的代码让我有点困惑。

具体来说,在我的事件混合中,我有类似的代码

this.get('events').on(eventName, this, callback);

但是,如果我查看我的事件总线,它就像我使用的常见固件服务,它具有

subscribe: function(){
this.on.apply(this, arguments);
}

我很困惑,我的应用程序没有直接调用事件总线中定义的 publish/subscribe/unsubscribe 方法(相反,我有 this.get('events' ).on(....))

它是如何工作的?

最佳答案

实际的Ember.evented模式使用on , off , 和 trigger作为主要 API。您的事件总线服务似乎是这些函数的包装器,使 Ember.Evented 符合更通用的发布/订阅模式。

以下代码

publish: function(){
return this.trigger.apply(this, arguments);
},
subscribe: function(){
this.on.apply(this, arguments);
}

已有效别名trigger -> publishon -> subscribe。为什么这些别名函数没有在您的代码库中使用,除了您的队友之外没有人可以回答(或者可能通过版本控制历史进行搜索)。从您显示的代码来看,应用中的组件使用 event-bus 作为事件源,但直接使用 Ember.Evented API。

关于javascript - 在服务中使用 Ember 事件来发布/订阅事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60799589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com