Rails 7 中 App.cable 的等价物是什么?

问题描述 投票:0回答:1

我正在关注 DHH 的 Rails 5 Action Cable 演示1

使用浏览器的开发者控制台,他使用

App.cable
获取电缆的引用。在 Rails 7 中尝试同样的事情会抛出

Uncaught ReferenceError: App is not defined

我查了一下由 Rails Action Cable Generator 生成的代码,确实没有任何叫这个名字的东西。不过,Rails 5 和 Rails 7 之间的配置有很大不同,我正在努力寻找任何方法来获取客户端电缆的引用。

我也尝试过

Turbo.cable
,结果返回了
undefined
。我可以看到电缆已连接(下图)。我可以在控制台中使用什么来与其交互?

谢谢你

developer-tools actioncable ruby-on-rails-7
1个回答
0
投票

我想出了一种方法。默认情况下,如果您使用rails生成器创建通道,例如

rails g channel room speak

您将获得一个名为

room_channel.js
的通道文件,如下所示:

import consumer from "channels/consumer"

consumer.subscriptions.create("RoomChannel", {
  connected() {
    // Called when the subscription is ready for use on the server
  },

  disconnected() {
    // Called when the subscription has been terminated by the server
  },

  received(data) {
    // Called when there's incoming data on the websocket for this channel
  },

  speak: function() {
    return this.perform('speak');
  }
});

将第二行更改为:

window.roomChannel = consumer.subscriptions.create("RoomChannel", {

使

roomChannel
在开发者工具控制台中可用。我现在可以在客户端输入
roomChannel.speak()
并在服务器端查看收到的消息。

显然这会改变

window
上的全局状态,但我认为为了调试能力这是值得的。

© www.soinside.com 2019 - 2024. All rights reserved.