node.js - Coffeescript - 如何调用作用域链上两层的方法?

标签 node.js coffeescript

如何调用作用域链上两级的函数,例如本例中的 _write_colors_data_to_file:

class Server
  _sio_configure_listener: (app) ->

    sio = Socket.listen app,
      'logger'   : logger,
      'log level': logger.level

    # when Client user runs `io.connect()`
    sio.sockets.on 'connection', (socket) ->

      # when Client is live-previewing color
      socket.on 'colorChanged', (data) ->
        logger.info 'colorChanged event emitted'

        # how do I invoke this method?
        @_write_colors_data_to_file()

  _write_colors_data_to_file: ->
    # some logic

module.exports = Server

最佳答案

为此,我会避免使用两个级别的 => ,这会将您的上下文弄得到处都是,并使事情对我的口味来说有点过于困惑。我会使用命名函数(或者至少是 CoffeeScript 版本的命名函数):

_sio_configure_listener: (app) ->
  #...
  save_colors = (data) =>
    logger.info 'colorChanged event emitted'
    @_write_colors_data_to_file()
  sio.sockets.on 'connection', (socket) ->
    socket.on 'colorChanged', save_colors

这保留了 binding =>靠近您要绑定(bind)的 @ ,稍后,当您绑定(bind)到 'colorChanged' 事件时,您只有一个简单的逻辑片段,方便命名为 save_colors

仅仅因为您可以在任何地方使用匿名函数并不意味着您必须这样做。

关于node.js - Coffeescript - 如何调用作用域链上两层的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20462081/

相关文章:

javascript - 如何使用 jasmine-node 配置 RequireJS (require.config())?

javascript - 在书签中使用 jQuery UI

javascript - 向数组(内置对象)添加自定义方法时的最佳实践

node.js - 编译 Rails 3.1 Assets 的 ExecJS 问题

javascript - 如何向 Coffeescript 中的现有对象添加方法?

javascript - 浏览器中的 Socket.io 服务器

java - 如何使用 socket.io 发送二进制数据?

javascript - 如何响应 Telegram Bot Webhook 请求?相同的请求重复出现

Node.js 模块从 MongoDB 数据库获取数据

javascript - 将 NODE_ENV 传递给 Angular