6

Um Abonnements zu erstellen Ich betreibe:Wie entfernen Sie in Rails 5 mit kanal.subscriptions.remove ein Kanalabonnement für Aktionskabel?

App.room = App.cable.subscriptions.create({ 
    channel: "RoomChannel", 
    roomId: roomId 
    }, { 
    connected: function() {}, 
    disconnected: function() {}, 
    received: function(data) { 
     return $('#messages').append(data['message']); 
    }, 
    speak: function(message, roomId) { 
     return this.perform('speak', { 
     message: message, 
     roomId: roomId 
     }); 
    } 
    }); 

Aber weil ich der Kunde möchte nie mehr als einen Kanal abonniert werden, was kann ich jedes Mal, bevor diese ausgeführt werden alle Abonnements entfernen hat der Kunde?

Ich habe versucht, etwas super hacky wie zu tun:

App.cable.subscriptions['subscriptions'] = [App.cable.subscriptions['subscriptions'][1, 0]] 

Aber ich bin sicher, dass es nicht funktioniert, weil es viele andere Komponenten, die in ein Abonnement/Abbestellung gehen.

App.cable.subscriptions.remove erfordert ein Abonnement-Argument, aber was gebe ich weiter?

Danke!

Antwort

3

Wenn Sie dies vor jeder Abonnementerstellung ausführen, stellen Sie sicher, dass pro Client nur maximal ein Abonnement vorhanden ist.

if (App.cable.subscriptions['subscriptions'].length > 1) { 
    App.cable.subscriptions.remove(App.cable.subscriptions['subscriptions'][1]) 
}; 
0

Es sieht aus wie Sie einen Verweis auf Ihr Abonnement erstellen müssten auf erstellen

let mySubscription = App.cable.subscriptions.create({ 
    channel: "MyChannel" 
}, 
{ 
    connected:() => { console.log('connected') }, 
    disconnected:() => {}, 
    received: (data) => {} 
}); 

und entfernen Sie sie dann wie so

App.cable.subscriptions.remove(mySubscription) 
6

Ein bisschen eine späte Antwort, aber in Anbetracht dessen, dass Sie bereits erklärt haben

App.room = App.cable.subscriptions.create(...)

zu entfernen, so etwas wie

if (App.room) App.cable.subscriptions.remove(App.room);

sollte ausreichen.