我想将我主页上的一些js内联脚本移动到javascript文件(在Assets中),但由于变量存在一些复杂性。
home.html.erb
<div>
this is the homepage
</div>
<script>
<% @deal.deal_details.each_with_index do |popin, index| %>
<% index_plus_one = index + 1 %>
function loadInfoPopin() {
var msg;
msg = Messenger().post({
message: '<%= j render partial: "deals/info_popin/info_popin#{ popin['popin_id'] }",
locals: { popin: popin, index: index_plus_one } %>'
});
}
<% end %>
</script>
为了便于获取信息,这里是Deal的列/属性'deal_details'的格式(它是一个json属性):
[{"popin_id":"4","text1":"qqq","text2":"sqsq","image1":"sqqs"},{"popin_id":"5","text1":"sqqs","video1":"s"}]
这是一个例子,您可以在数组中尽可能多地使用json块。
deals / info_popin / info_popin5.html.erb(这是一个例子)
<div>
<p><a href="<%= popin['image1'] %>">cool image</a></p>
</div>
</div>
现在,我如何将整个脚本或至少函数loadInfoPopin()移动到javascript文件(也就是说远离视图home.html.erb)?
由于
答案 0 :(得分:1)
如何将loadInfoPopin()
函数移动到单独的JS文件中并稍微改变函数以获取html消息的参数?
function loadInfoPopin(html_message) {
Messenger().post({
message: html_message
});
在传入并调用loadInfoPopin
之前,在循环内设置消息的html。
答案 1 :(得分:0)
.js.erb是一个选项。这样在编译之前将解析js文件。不确定它会以你想要的方式工作。
我建议将布局中的变量保留为vars,并仅将静态JS部件移动到资产。