如何在维护DRY代码的同时运行依赖于js事件的coffeescript方法
How can I run a coffeescript method that depends on the js event while maintaining DRY code?
我想清空这个代码:
@$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()
之间交替?
要扩展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]()
您可以尝试:
capitaliseFirstLetter = (string) -> string.charAt(0).toUpperCase() + string.slice(1)
# you could also include the underscore.string library and use _.capitalize
event_type = "mouse#{capitaliseFirstLetter(e.type.split('mouse')[1])}"
@player[event_type]()
相关文章:
- 依赖于缓慢加载javascript的UI
- 如何隐藏&使用jQuery禁用依赖于另一个字段值的字段
- Node.js中依赖于版本的类型继承
- 如何使AngularJS控制器依赖于通过ajax加载在rootScope上的值
- 如何使用EnquireJS使AngularJS范围变量依赖于媒体查询
- Ajax xml源解析依赖于jQuery的点击操作
- Sails.js日志传输依赖于环境
- 如何使用 2 个 XMLHttpRequest 一个依赖于另一个
- Javascript表单.使一个条目依赖于另一个条目
- 在<p>标签依赖于<选择>标签,javascript
- Angularjs-uib日期选择器中的customClass依赖于promise
- 试图使一个事件依赖于另一个事件,并使用jquery自定义事件传递数据
- 使用jquery如何自动删除下拉列表中的第一个空白选项(如果它依赖于另一个选项)
- yii2:依赖于Action的条件显示/显示字段
- 测试依赖于另一个指令Angularjs的指令
- 为什么 Gulp 在运行依赖于它的任务之前没有完成我的“清理”任务
- 如何只运行一个函数一次,然后运行另一个依赖于相同元素的函数
- 如何在维护DRY代码的同时运行依赖于js事件的coffeescript方法
- 如何创建一个RxJS缓冲区,将NodeJS中的元素分组,但不依赖于永远运行的间隔
- 如何使用Android webview运行依赖于另一个库/模块的javascript