gpt4 book ai didi

javascript - 我可以使用 ActionCable 来刷新页面吗?

转载 作者:行者123 更新时间:2023-12-01 16:16:18 24 4
gpt4 key购买 nike

我最近一直在尝试为 Squash 比赛创建一个实时计分系统。我已经设法将 ActionCable 与 Rails 5 一起使用来自动更新页面上的分数,但我想知道是否可以告诉 Rails 在满足特定条件时刷新页面。

例如,如果游戏已经结束,则会显示一个不同的页面,说明玩家在游戏之间休息。为此,我需要页面完全刷新。

在我的数据库中, bool 值“break”在游戏结束时标记为 true,然后 View 使用条件 if/else 语句来决定显示什么。

我用来更新分数的代码附在下面,我想的是 if data.break == true 那么页面将自动刷新。

// match_channel.js (app/assets/javascripts/channels/match_channel.js)

$(function() {
$('[data-channel-subscribe="match"]').each(function(index, element) {
var $element = $(element),
match_id = $element.data('match-id')
messageTemplate = $('[data-role="message-template"]');


App.cable.subscriptions.create(
{
channel: "MatchChannel",
match: match_id
},
{
received: function(data) {
var content = messageTemplate.children().clone(true, true);
content.find('[data-role="player_score"]').text(data.player_score);
content.find('[data-role="opponent_score"]').text(data.opponent_score);
content.find('[data-role="server_name"]').text(data.server_name);
content.find('[data-role="side"]').text(data.side);

$element.append(content);
}
}
);
});
});

我不知道这种事情是否可能,而且我不太擅长与 Javascript 相关的任何事情,所以我很感激任何帮助。

谢谢。

最佳答案

重新加载当前页面相对简单。如果您使用的是 Turbolinks,则可以使用 Turbolinks.visit(location.toString()) 触发对当前页面的重新访问。如果您不使用 Turbolinks,请使用 location.reload()。因此,您的 received 函数可能如下所示:

received: function(data) {
if (data.break) {
return location.reload();
// or...
// return Turbolinks.visit(location.toString());
}

// your DOM updates
}

这两种方式都等同于用户点击重新加载按钮,因此它会触发另一个 GET,调用您的 Controller 并重新呈现 View 。

关于javascript - 我可以使用 ActionCable 来刷新页面吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63770241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com