Надлежащий способ настроить Eventemitters для связи между экземплярами родителя и объекта? - PullRequest
0 голосов
/ 07 ноября 2019

Впервые в классах EventEmitter и ES6, и я пытаюсь получить правильное оснащение. У меня есть «основной», который создает экземпляр EventEmitter. В "main" я создаю экземпляры объектов, которые я хочу иметь возможность прослушивать события, испускаемые источником событий "main". Я могу передать ссылку на mainEmitter Event каждому конструктору объекта, но, поскольку класс объекта определен в отдельном файле модуля, я думаю, что он не знает, что ссылка имеет тип EventEmitter, поэтому в классе объекта я не могу определитьпрослушиватель "on" в ссылке на EventEmitter main:

Main:

const listeningclassinstance = new ListeningClass(maineventemitter);

Класс субмодуля:

export default class ListeningClass {
  constructor(maineventemitter) {
    this.maineventemitter = maineventemitter;
  }
  maineventemitter.on("emittedevent", () => { // Visual Studio Code complains
    onemittedevent();
  });

  onemittedevent() {
    console.log("ListeningClass onemittedevent")
  }
  // ListeningClass
}

1 Ответ

0 голосов
/ 07 ноября 2019

Итак, вот что я подстроил, это работает, хотя я знаю, что в ES6 есть более интересный синтаксис getter / setter. Также я передаю определение класса EE3 классу подмодуля после одного асинхронного вызова для загрузки модуля EE3 ... возможно, есть лучший способ справиться с этим ...

Main:

// webpack dynamic import of EventEmitter3 here, setting a ref to EE3's class def
// the following Main code is actually within the dynamic import's promise then()

const listeningclassinstance = new ListeningClass(ee3class ,maineventemitter);
const listeningclassinstanceeventemitter = listeningclassinstance.getlisteningclasseventemitter();
listeningclassinstanceeventemitter.on("emittedeventfromlisteningclassinstance", () => {
    console.log("main can hear event emitted from listeningclassinstance");
  });

Подмодуль Класс:

export default class ListeningClass {
  constructor(ee3class,maineventemitter) {
    this.maineventemitter = maineventemitter;
    this.maineventemitter.on(
      "emittedeventfrommain",
      this.onemittedeventfrommain.bind(this);
    this.eventemitter = new ee3class();  
  }

  onemittedeventfrommain() {
    console.log("ListeningClass emittedeventfrommain");
    this.eventemitter.emit("emittedeventfromlisteningclassinstance");
  }

getlisteningclasseventemitter() {
    return this.eventemitter;
}

  // ListeningClass
} 
...