7

私が実行するサブスクリプションを作成するには:

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

しかし、クライアントが複数のチャネルにサブスクライブしないようにしたいので、この前にクライアントが持っているすべてのサブスクリプションを削除するために毎回何を実行できますか?

私は次のような超ハッキーなことをしようとしました:

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

しかし、購読/購読解除に入る他の多くのコンポーネントがあるため、うまくいかなかったと確信しています.

App.cable.subscriptions.remove にはサブスクリプション引数が必要ですが、何を渡せばよいでしょうか?

ありがとう!

4

3 に答える 3

3

各サブスクリプションの作成前にこれを実行すると、クライアントごとに最大 1 つのサブスクリプションのみが存在することが保証されます。

if (App.cable.subscriptions['subscriptions'].length > 1) {
    App.cable.subscriptions.remove(App.cable.subscriptions['subscriptions'][1])
};
于 2016-05-02T05:43:50.560 に答える
1

作成時にサブスクリプションへの参照を作成する必要があるようです

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

そして、そのようにそれを削除します

App.cable.subscriptions.remove(mySubscription)
于 2016-09-12T18:27:44.033 に答える