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

但是因为我希望客户永远不会订阅多个频道,所以在此之前我每次可以运行什么来删除客户拥有的所有订阅?

我试图做一些超级hacky的事情,比如:

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

但我确信它不起作用,因为订阅/取消订阅还有许多其他组件。

App.cable.subscriptions.remove 需要一个订阅参数,但我要传入什么?

谢谢!

4

3 回答 3

7

有点晚的答案,但考虑到你已经宣布

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

删除,比如

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

应该足够了。

于 2017-02-10T18:49:25.733 回答
3

在每个订阅创建之前运行此操作将确保每个客户端最多只有一个订阅。

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 回答