【问题标题】:Socket.io Nodejs CoffeeScript getting both socket and current inherited class variable in socket.onSocket.io Nodejs CoffeeScript 在 socket.on 中获取套接字和当前继承的类变量
【发布时间】:2014-04-19 09:46:32
【问题描述】:

我遇到了一个问题,我需要套接字和类实例但无法获取它们。 我有配置文件,其中有以下事件:消息、发布、共享。我有以下代码:

module.exports = class Controller

    constructor : (container) ->
        @_routes = null

    _generateRoutes : (routes) ->
        @_routes = routes

    _bind : (socket) ->
        instance = @
        for route in @_routes
            # TODO : fix this
            socket.on route['event'], (data) ->
                instance[route['action']](@, data)

问题是,我可以调用该表中的任何事件,它总是以共享事件结束。我认为这可能是实例 [route['action]] 中的问题。有没有办法明确地说我只想要一个变量的值,而不是函数中的当前变量?

所以每次我可以在直接绑定套接字操作时只获取套接字,或者在继承类中使用 => 时只获取类实例。

感谢回复

【问题讨论】:

    标签: javascript node.js coffeescript socket.io


    【解决方案1】:

    所以我意识到该代码有什么问题。它应该使用闭包。对于闭包,coffeescript 中有一个关键字“do”。然后,它不会在每个循环中使用更改的路由值,而是使用本地值。

    固定的 _bind 函数如下所示:

        _bind : (socket) ->
        instance = @
        for route in @_routes
                do (route)->
                    socket.on route['event'], (data) -> 
                        instance[route['action']](@, data)
    

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 2013-10-03
      • 2013-03-01
      • 1970-01-01
      • 2015-04-15
      • 2011-06-04
      • 2015-12-26
      • 2015-11-09
      • 1970-01-01
      相关资源
      最近更新 更多