2012-03-30 64 views
1

我正在使用now.js羣組,並且想要監聽用戶何時離開羣組,因此如果羣組爲空,我可以執行一些整理。我發現,每次用戶進入一個組時,都會多次調用離開事件,即如果我加入一個組並關閉瀏覽器3次,第3次離開將被調用3次。nowjs羣組事件被稱爲多次

chatserver.prototype.joinGroup = function(groupId) { 
    //user joins group 
    var group = this.nowjs.getGroup(doc_id); 
    group.addUser(that.user.clientId); 

    //want to know when a user leaves a group 
    group.on('leave', function() { 
     console.log("user left group:"+groupId) 
     //do group clean up 
    }); 
}; 

我是否在做範圍錯誤?

+0

的問題絕對是您的組陣,你任何地方調用group.removeUser在你的代碼?如果沒有嘗試在nowjs斷開連接事件時觸發'group.removeUser(that.user.clientId)'! – drinchev 2012-04-22 12:14:33

+0

我試過在回調函數裏面,但是removeUser觸發了離開事件,所以你會陷入循環。 – 2012-04-22 13:04:14

+0

我的意思是斷開事件。例如:'nowjs.on('disconnect',function(){group.removeUser(this.user.clientId)});'。如果您沒有任何removeUser,那麼在原始代碼中導致組的離開事件的原因是什麼? – drinchev 2012-04-22 13:07:39

回答

0

您應該從已經連接的組中刪除每個用戶,斷開連接。

喜歡的東西:

nowjs.on('disconnect', function() { 
     var that = this; 
     this.getGroups(function(groups) { 
      for (i=0 ; i < groups.length; i++) { 
       nowjs.getGroup(groups[i]).removeUser(that.user.clientId); 
      } 
     } 
} 
+0

謝謝你的幫助。這似乎意味着「離開」事件無法使用。它也不允許用戶只留下一個我需要做的組。 – 2012-04-22 13:24:55

+0

恕我直言,你應該從他所在的組中刪除用戶,當他斷開連接時,因爲在每次連接時你都將他重新放入組中(例如,如果有人離開組),則離開事件仍然處於開啓狀態目的(而不是斷開)。 – drinchev 2012-04-22 13:28:52

+2

我相信現在可以在斷開連接時從所有組中刪除用戶。如果有人離開,我真正需要的是清理一個小組。 – 2012-04-22 13:40:46