2017-03-26 15 views
0

나는이 다음 코드 : 나는 "someEvent는"ClassB가 단지 ClassB가의 생성자에 전달됩니다 그러나 때 "이 someEvent"을 수신하도록 설정를 ClassA를 구성 지금CreateJS가 작동하지 EventListener를 제대로

class classA { 
    constructor() { 
     createjs.EventDispatcher.initialize(classA.prototype); 

     this.addEventListener("someEvent", function(evt) { 
      console.log("classA has detected something has happened!"); 
     }); 
    } 
} 

class classB { 
    constructor() { 
     createjs.EventDispatcher.initialize(classB.prototype); 

     this.addEventListener("someEvent", function(evt) { 
      console.log("classB has detected something has happened!"); 
     }); 

     this.dispatchEvent("someEvent"); 
    } 
} 

let a = new classA(); 
let b = new classB(); 

이벤트를 등록합니다.

왜 이런가요?

답변

0

"ClassB"인스턴스 만 "ClassB"인스턴스에 의해 발송 된 이벤트를 수신하므로이 상황이 발생합니다. 당신이 당신의 클래스를 만들 때, 당신은 다음과 같습니다

  1. 는 "someEvent"다음
  2. 그리고 대한 this에 청취자를 추가는 EventDispatcher
  3. 에 혼합 (만) ClassB가 인스턴스가 "someEvent"을 파견한다.

ClassA 인스턴스는 각 클래스가 자체 이벤트 만 수신하므로 ClassB 인스턴스가 전달한 이벤트를 catch하지 않습니다.

ClassB에서 이벤트를 수신하려면 해당 이벤트를 설정해야합니다. 생성자의 prototype로는 EventDispatcher에 혼합하는 것이

var a = new ClassA(); 
var b = new ClassB(); 
b.addEventListener("someEvent", a.someFunction); 

참고. 프로토 타입에서 원한다면 생성자 외부에 추가하십시오. 그렇지 않으면 매번 발생합니다. 하나의 인스턴스에만 원한다면 생성자에 넣고 Class.prototype 대신 this을 전달하면됩니다.

class ClassB { 
    // stuff 
} 
createjs.EventDispatcher.initialize(ClassB.prototype); 

또는 더 나은 점은 EventDispatcher를 확장하기 만하면됩니다.

Class B extends createjs.EventDispatcher { 
    // stuff 
}