1

次のようなオブジェクトがあるとします (coffeescript を使用):

class Client
  constructor: (socket) ->
    @id     = socket.id
    @socket = socket
    # some other initialization here...

ここで、@socket が何かを発行するたびに、クライアント オブジェクトが同じイベントを発行することによってそれを模倣するようにします。@socket によって発行されるすべてのイベントを監視し、Client クラス内で手動で発行するよりも、これを行うためのより良い方法は考えられません。

class Client
  constructor: (socket) ->
    # ...
    @socket.on('disconnection', onDisconnect)
    @socket.on('message', onMessage)

  onDisconnect: ->
    this.emit('disconnection')

  onMessage: (data) ->
    this.emit('message', data)

もっと良い方法が必要なのはわかっていますが、どうすればよいかわかりません。

4

2 に答える 2

0

このようなもの?(未テスト)

class Client

  constructor: (socket) ->
    # ...
    for event in ['disconnect', 'message']
      @socket.on(event, => @emit(event, arguments))
于 2012-09-08T15:06:06.540 に答える
0

Monkey-patch@socketオブジェクトが発行するもの:

class Client
  constructor: (socket) ->
    @reEmit(socket)

  reEmit: (ee)->
    oldEmit = ee.emit
    ee.emit = (args...)=>
      @emit(args)       
      oldEmit.apply(ee, args)
于 2012-09-08T23:03:50.423 に答える