2013-01-16 5 views
0

이것이 작동하지 않는 이유가 확실하지 않습니다. 누군가 나를 단서 줄 수 있습니까? 나는 어떤 이벤트가 기록 얻을 표시되지 않습니다,하지만 그들은 물론, 내가 :)Coffee 하위 클래스 문제가있는 EventEmitter

{EventEmitter} = require 'events' 

class Base extends EventEmitter 

class App extends Base 

    constructor: (cb) -> 

    console.log 'setup' 

    @on 'listener:1', (data) -> 
     console.log 'listener 1: ' + data 

    @on 'listener:2', (data) -> 
     console.log 'listener 2: ' + data 

    cb() 

class One extends Base 

    fire:() -> 

    console.log 'fire 1' 

    @emit 'listener:1', 1 

class Two extends Base 

    fire:() -> 

    console.log 'fire 2' 

    @emit 'listener:2', 2 

new App(
() -> 
    setTimeout (-> 
     one = new One() 
     one.fire() 
     setTimeout (-> 
     two = new Two() 
     two.fire() 
    ), 2000 
    ), 2000 
) 

답변

1

프로그램의 출력이 예상되는으로 생각 ... emitted을받을 수 있나요; App 만 자체에 리스너를 설정하지만 결코 의 모든 것 (OneTwo이 아니며 하위 클래스는 App이 아님). 아마도 당신은 다음과 같은 것을 찾고 있습니까?

{EventEmitter} = require 'events' 

class Base extends EventEmitter 
    constructor: -> 
    console.log 'setup' 

    @on 'listener:1', (data) -> 
     console.log 'listener 1: ' + data 

    @on 'listener:2', (data) -> 
     console.log 'listener 2: ' + data 

class App extends Base 
    constructor: (cb) -> 
    super() 
    cb() 

class One extends Base 
    fire: -> 
    console.log 'fire 1' 
    @emit 'listener:1', 1 

class Two extends Base 
    fire: -> 
    console.log 'fire 2' 
    @emit 'listener:2', 2 

new App(
    -> 
    setTimeout (-> 
     one = new One() 
     one.fire() 
     setTimeout (-> 
     two = new Two() 
     two.fire() 
    ), 2000 
    ), 2000 
) 
+0

글쎄, 그런 식으로 넣을 때! 나는 EventEmitter가 프로세스 또는 무언가와 같이 세계적이라는 것을 추측했다. 어쩌면 내가 이것을 다시 생각할 필요가있다. 감사! –

+0

아, 잡았다. 아니요, 이벤트 청취자는 EventEmitter 인스턴스에 로컬입니다. 'on'이 호출됩니다. 하나의 인스턴스를 만들고 Event Bus 같은 모듈 형태로 내보내기하여 "글로벌"EventEmitter를 구축 할 수 있습니다. –

+0

그게 정확히 내가 한 짓이야 :) 고마워! –

관련 문제