我正在关注 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
。我可以看到电缆已连接(下图)。我可以在控制台中使用什么来与其交互?
谢谢你
我想出了一种方法。默认情况下,如果您使用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
上的全局状态,但我认为为了调试能力这是值得的。