6

创建订阅我运行:如何在App.cable.subscriptions.remove中删除Rails 5中的actioncable频道订阅?

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需要订阅参数,但是我传入了什么内容?

谢谢!

回答

3

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

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

它看起来像你需要创建在您的订阅参考创建

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

,然后删除它,像这样

App.cable.subscriptions.remove(mySubscription) 
6

一个迟到的回答的有点,但考虑你已经宣布

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

去除,像

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

应该足够了。