如何使用App.cable.subscriptions.remove删除Rails5中的actioncable频道订阅

How do you remove an actioncable channel subscription in Rails 5 with App.cable.subscriptions.remove?

本文关键字:actioncable 中的 频道 Rails5 删除 App 何使用 cable subscriptions remove      更新时间:2023-09-26

要创建订阅,我运行:

  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需要一个订阅参数,但我要传递什么?

谢谢!

答案有点晚,但考虑到您已经声明了

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

删除,类似的东西

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

应该足够了。

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

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

看起来您需要在创建时创建对订阅的引用

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

然后像一样将其移除

App.cable.subscriptions.remove(mySubscription)