Основной вопрос
Событие, генерируемое в одном классе, который поддерживает EventDispatcher, не обрабатывается другим классом, который поддерживает EventDispatcher.
Как заставить общение работать во всем приложении, чтобы я мог передавать сообщения?
На данный момент кажется, что он поддерживает только передачу сообщения своему классу.
Справочная информация
Я использую этот шаблон, который дает мне Three.js и ES6:
https://github.com/paulmg/ThreeJS-Webpack-ES6-Boilerplate
Я обновил пакеты вручную, чтобы использовать three.js r97.
Я смотрю на класс EventDispatcher и думаю, что этодля меня это чистый способ передавать сообщения по всей системе, оставляя ее разъединенной.Например, у меня есть некоторый пользовательский интерфейс HTML, который наблюдает за флажком.
Урезанный до основного примера, у меня есть взаимодействие.до основных битов):
import {EventDispatcher} from 'three';
export default class BoxManager {
constructor() {
// Add event dispatcher support
Object.assign( this, EventDispatcher.prototype );
}
setupBoxes(manager) {
console.log("adding event listener on BoxManager.js");
this.addEventListener( 'boxOpenStateToggled', function ( event ) {
console.log("event caught by BoxManager.js", event);
} );
}
}
Когда я запускаю событие boxOpenStateToggled
на Interaction
, прослушиватель событий BoxManager
не захватывает его.
Я получаю консольный журналвот так:
adding event listener on BoxManager.js
adding event listener on Interaction.js
(I trigger the event)
event emitting
event caught in Interaction.js {type: "boxOpenStateToggled", message: {…}, target: Interaction}
event emitted
Что я ожидал здесь, так это увидеть «событие, пойманное в BoxManager» - это системный диспетчер событий?Или он может отправлять события только для каждого отдельного класса?
Показывая мою работу
Я не был уверен, что это то, с чем я его использовал, поэтому я попытался:
с использованием ключевого слова extends
в классе, чтобы дать функциональность EventDispatcher
, и это работает, но только внутри класса.
с использованием.call
версия изначально, которая была в более раннем выпуске three.js.
Я не могу найти никаких реальных обсуждений или примеров использования EventDispatcher или посмотреть, где он вообще используется вбиблиотека.
Я неправильно понял его цель?Я использую это неправильно?