2

このコードを乾かしたい:

@$canvas.on 'mousemove', (e) =>
  return unless @running
  @mouseTarget.set @board.x + e.clientX, @board.y + e.clientY * 2
  @player?.mouseMove()

@$canvas.on 'mousedown', (e) =>
  return unless @running
  @mouseTarget.set @board.x + e.clientX, @board.y + e.clientY * 2
  @player?.mouseDown()

@$canvas.on 'mouseup', (e) =>
  return unless @running
  @mouseTarget.set @board.x + e.clientX, @board.y + e.clientY * 2
  @player?.mouseUp()

私は何かを効果的にしたい:

@$canvas.on 'mousemove', 'mousedown', 'mouseup' -> @mouseAction

mouseAction: (e) =>
  return unless @running
  @mouseTarget.set @board.x + e.clientX, @board.y + e.clientY * 2
  @player?.mouseUp() # here is the problem...

問題は、 DRY コードを維持しながら@player?.mouseUp()@player?.mouseDown()とを切り替えるにはどうすればよいかということです。@player?.mouseMove()

4

2 に答える 2

1

pdoherty926 の回答を拡張するには、何らかの方法で同じことを行いたいが、異なるメソッドを呼び出す必要があります@player。メソッド名を制御し、いつでもイベント タイプを使用できる場合は、pdoherty926 が提案することを実行できます。それ以外の場合は、より明示的な解決策の提案を次に示します。

@$canvas.on 'mousemove', @mouseAction 'mouseMove'
@$canvas.on 'mousedown', @mouseAction 'mouseDown'
@$canvas.on 'mouseup', @mouseAction 'mouseUp'

mouseAction: (action) =>
  (e) =>
   return unless @running
   @mouseTarget.set @board.x + e.clientX, @board.y + e.clientY * 2
   @player?[action]()
于 2013-09-03T19:16:19.347 に答える