2013-07-31 125 views
2

我有問題,我想ONLY房間IDSocket.io如何讓房間ID

我知道io.sockets.manager.rooms但它返回對象:/

在代碼(我送的列表房間客戶端和他檢查ID)

io.sockets.on('connection', function(socket) { 

    socket.join('main'); 
    socket.emit('start',io.sockets.manager.roomClients[socket.id]);  

}); 

和客戶端:

var socket = io.connect('http://localhost:3250');       
     socket.on('start', function(data) {  
      panel.innerHTML = data; 
       }  

解決的辦法是:

var keys = function(object) { 
    if (!(object && typeof object === 'object')) { 
    return null; 
    } 
    var result = []; 
    for (var key in object) { 
    if (object.hasOwnProperty(key)) { 
     result.push(key) 
    } 
    } 
    return result; 
} 

    var obiekt = io.sockets.manager.rooms; 

    socket.emit('rooms', keys(obiekt)) 

回答

1

我不是100%肯定您這裏需要。你想返回一組房間名稱嗎?如果是這樣,您可以從io.sockets.manager.rooms返回的對象中獲取密鑰,例如使用下劃線提供的輔助函數:

socket.emit('rooms', _.keys(io.sockets.manager.rooms)); 

編輯:我用下劃線在這裏,但你也可以編寫自己的按鍵功能,通過該對象的屬性循環,像這樣的東西:

var keys = function(object) { 
    if (!(object && typeof object === 'object')) { 
    return null; 
    } 
    var result = []; 
    for (var key in object) { 
    if (object.hasOwnProperty(key)) { 
     result.push(key) 
    } 
    } 
    return result; 
} 

請注意,這可能會遺漏一些邊緣情況,但您的想法是

+0

是是的我的意思是!但我有你的代碼的問題,我得到錯誤:'ReferenceError:_未定義' – Adacho

+0

我拿[Underscore](http://underscorejs.org/)作爲示例幫助程序庫來獲取「鍵」功能,你必須將該庫添加到您的項目才能使用它。 – axelcdv

+0

我改變了一點功能,我有: – Adacho