为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2023-02-17 11:08:25
我最近一直在尝试为壁球比赛创建一个实时计分系统。我已经设法将 ActionCable 与 Rails 5 一起使用来自动更新页面上的分数,但我想知道是否可以告诉 Rails 在满足特定条件时刷新页面。例如,如果游戏已经结束,则会显示一个不同的页面,说明玩家在游戏之间休息。我需要页面完全刷新才能发生这种情况。在我的数据库中,布尔值“break”在游戏结束时被标记为 true,然后视图使用条件 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 相关的任何事情,所以我很感激这方面的任何帮助。
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

重新加载当前页面相对简单。如果您使用的是 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,调用您的控制器并重新呈现视图。


查看完整回答
反对 回复 2023-02-17
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信