You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 7中Turbo Frame/Stream无法渲染Chartkick/Rails_charts求助

Rails 7 + Turbo Stream 下图表渲染失败问题求助

环境依赖

gem "rails", "7.0.8" 
gem "sprockets-rails"                        
gem "jsbundling-rails"
gem 'turbo-rails', '~> 1.5'  
gem 'stimulus-rails', '~> 1.3'
gem "cssbundling-rails"       
gem 'importmap-rails', '~> 1.2', '>= 1.2.3'
gem 'rails_charts', '~> 0.0.6'
#gem 'chartkick', '~>5.0.5'

问题详情

使用turbo_stream.update渲染局部视图、替换页面中的foobar元素时,局部视图内的脚本完全不执行——不管是rails_charts的初始化代码,还是测试用的console.log都没有输出,导致图表无法渲染。

切换为turbo_frame后,console.log可以执行,但图表依然无法显示。尝试过Chartkick,遇到完全相同的问题。

查阅过相关社区讨论,注意到rails_charts仓库里有人提问是否支持turbo streams,但生成的JS代码里明明包含Turbo事件监听器,却无法触发。目前只能无奈回退到整页加载,求可行的解决思路。

相关代码片段

控制器中的Turbo Stream响应

format.turbo_stream do
   render turbo_stream: [
      turbo_stream.update("avg_wait_area",
                         partial: "wait_stats/avg_wait_chart",
                              locals: { mon_stats: @mon_stats })
        ]
    end

局部视图 _avg_wait_chart.turbo_stream.erb

<div id="avg_wait_area">
  foobar
</div>

rails_charts生成的DOM及初始化脚本

<div id="rails_charts_339d948522be9104817e0757052eebc2663a61dc" class="box" style="width: 100%; height: 450px">
  <script>
    if (!window.RailsCharts) {
      window.RailsCharts = {}
      window.RailsCharts.charts = {}
    }

    function init_rails_charts_339d948522be9104817e0757052eebc2663a61dc(e) {
      if (document.documentElement.hasAttribute("data-turbolinks-preview")) return;
      if (document.documentElement.hasAttribute("data-turbo-preview")) return;

      <!-- RailsCharts::StackedBarChart -->
      var chartDom = document.getElementById('rails_charts_339d948522be9104817e0757052eebc2663a61dc');

      if (!chartDom) { return }

      var lib = ("echarts" in window) ? window.echarts : echarts;
      var chart = lib.init(chartDom, null, { "locale": null, "renderer": "canvas" });
      var option = {"series":[{"data":[0.24,2.15,3.1,3.1,4.54,5.3,5.77,6.25,9.36,16.81,22.97],"type":"bar","stack":{}}],"xAxis":{"type":"value"},"yAxis":{"type":"category","data":["A","b","c","d","f","g","h","i","j","k","l"]},"tooltip":{"trigger":"axis","axisPointer":{"type":"shadow"}},"toolbox":{"feature":{"saveAsImage":{}}},"title":{"text":"Average Wait Days - Dec-2023"},"visualMap":{"show":false,"min":0,"max":25,"orient":"horizontal"},"grid":{"containLabel":true,"left":0}};
      option && chart.setOption(option);

      window.RailsCharts.charts["rails_charts_339d948522be9104817e0757052eebc2663a61dc"] = chart;
    }

    function destroy_rails_charts_339d948522be9104817e0757052eebc2663a61dc(e) {
      var chart = window.RailsCharts.charts["rails_charts_339d948522be9104817e0757052eebc2663a61dc"];
      if (chart) {
        chart.dispose()
      }
      delete window.RailsCharts.charts["rails_charts_339d948522be9104817e0757052eebc2663a61dc"];
    }

    window.addEventListener('load', init_rails_charts_339d948522be9104817e0757052eebc2663a61dc);
    window.addEventListener('turbo:load', init_rails_charts_339d948522be9104817e0757052eebc2663a61dc);
    window.addEventListener('turbolinks:load', init_rails_charts_339d948522be9104817e0757052eebc2663a61dc);

    document.addEventListener("turbolinks:before-render", destroy_rails_charts_339d948522be9104817e0757052eebc2663a61dc);
    document.addEventListener("turbo:before-render", destroy_rails_charts_339d948522be9104817e0757052eebc2663a61dc);
  </script>
</div>

内容的提问来源于stack exchange,提问作者gp-coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:29:53