动作:一种JavaScript动作,它试图基于两个参数(用户输入的一个参数和一个发出页面的参数)来检索数据。
而在过去,类似以下内容将起作用:
<%= javascript_tag do %> chart.data = data_<%=j params[:nation_id] %>; <% end %>
现在,JavaScript被“打包”了,像<%=j params[:nation_id] %>
这样的语法编译不起作用并返回:
/search.json?nation_id=%22%3C%=j%20params[:nation_id]%20%%3E%22&q=mi
packs/muni.js
如下修改文件,也不会为搜索功能生成正确的网址
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包-整个问题是,它在每次部署中打包一次,并且对于所有应用程序都是相同的(除了当您有多个包,动态模块加载和其他高级技术时,但代码未更改)每个请求)。实际上,使用资产管道的较旧方法在这方面非常相似。
不要尝试在包内使用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。你也可能需要逃避你phrase
用encodeURIComponent
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句