javascript rails 6 包上下文中参数的语法

javascript syntax for parameters in the context of rails 6 packs

操作:javascript 操作尝试根据两个参数检索数据,一个是用户输入参数,另一个是发布页面参数。

而在过去,类似以下的方法会起作用:

<%= javascript_tag do %> chart.data = data_<%=j params[:nation_id] %>; <% end %>

现在 javascript 为 'packed',像 <%=j params[:nation_id] %> 这样的语法编译不起作用,returns :

/search.json?nation_id=%22%3C%=j%20params[:nation_id]%20%%3E%22&q=mi 

修改 packs/muni.js 文件如下,也不会为搜索功能生成合适的 url

  var options = {
    url: function(phrase) {
      return '/search.json?nation_id="#{params[:nation_id]}"&q=' + phrase;
    },
    getValue: "name",
  };

返回

/search.json?nation_id=%22

页面设置为/new?top%5Bnation_id%5D=1&commit=Set

javascript包需要怎么写?

Javascript 包不会为每个 request/visitor 呈现 - 重点是它每次部署打包一次并且对所有包都是相同的(除非你有多个包,动态模块加载和其他高级技术,但仍然不会根据请求更改代码)。事实上,在这方面,使用资产管道的旧方法非常相似。

不要尝试在包内使用ruby,而是想办法将参数传递给js代码

例如,您可以通过添加一些 html 标记并从 javascript 查询它来传递它: 在视图中:

<meta name="nation_id" content="<%= params[:nation_id] %>" />

在 js 中:

nation_id = document.querySelector('meta[name="nation_id"]').content;
return `/search.json?nation_id=${nation_id}&q=${phrase}`;

PS。你也可能需要用 encodeURIComponent

来逃避你的 phrase