2012-03-30 7 views
1

Ich benutze now.js groups und möchte darauf achten, wenn ein Benutzer eine Gruppe verlässt, damit ich etwas aufräumen kann, wenn die Gruppe leer ist. Ich finde, dass das Abwesenheitsereignis mehrmals für jedes Mal aufgerufen wird, wenn ein Benutzer in einer Gruppe war, d. H. Wenn ich einer Gruppe beitrete und meinen Browser dreimal am dritten Mal schließe, werde ich dreimal aufgerufen.nowjs Gruppe leave Ereignis mehrmals aufgerufen

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 
    }); 
}; 

Mache ich etwas falsch mit Scoping?

+0

Das Problem ist auf jeden Fall in der Gruppe Array, rufen Sie group.removeUser überall in Ihrem Code? Wenn nicht versucht wird, "group.removeUser (that.user.clientId)" auf nowjs zu trennen, trennen Sie das Ereignis! – drinchev

+0

Ich habe versucht, dass innerhalb des Rückrufs zu verlassen aber removeUser löst das Verlassen-Ereignis, so dass Sie in einer Schleife stecken bleiben. –

+0

Ich meinte, trennen Ereignis smth. wie: 'nowjs.on ('disconnect', function() {group.removeUser (this.user.clientId)});'. Wenn Sie removeUser nicht haben, was verursacht das leave-Ereignis der Gruppe in Ihrem ursprünglichen Code? – drinchev

Antwort

0

Sie sollten jeden Benutzer aus der Gruppe entfernen, mit der er verbunden wurde, beim Trennen.

Etwas wie:

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

Danke für die Hilfe. Dies scheint ein Workaround zu sein, was bedeutet, dass das Ereignis "Leave" unbrauchbar ist. Es erlaubt auch nicht dem Benutzer, nur eine Gruppe zu verlassen, die ich tun muss. –

+0

IMHO, du solltest den Benutzer aus den Gruppen entfernen, in denen er sich befindet, wenn er die Verbindung trennt, weil du ihn bei jeder Verbindung wieder in die Gruppe (n) stellst ... leave event ist immer noch zum Beispiel wenn jemand die Gruppe verlässt Zweck (nicht durch Trennen). – drinchev

+2

Ich glaube, jetzt entfernt den Benutzer aus allen Gruppen bei der Trennung sowieso. Was ich wirklich brauche, ist, die Gruppe aufzuräumen, wenn jemand geht. –

Verwandte Themen