这是jplayer的代码:
歌曲/ show.html.erb
<% content_for :mp3script do %>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function(){
$("#jquery_jplayer_1").jPlayer({
ready: function () {
$(this).jPlayer("setMedia", {
mp3: "<%= @song.mp3.url %>"
}).jPlayer("play");
},
});
});
//]]>
</script>
<% end %>
我在application.html.erb
:
<%= yield :mp3script %>
一切正常,但将JavaScript直接放在html中有点难看,所以我想将它放在.js.erb
文件中。
当我把它放在mp3script.js.erb中时,会出现这个错误:
undefined method `mp3' for nil:NilClass
如果我成功地将javascript放在.js.erb
中,那么javascript application.js会在每次mp3链接改变生产时重新编译吗?我认为这很糟糕,对吧?
答案 0 :(得分:0)
您无法将数据从控制器推送到资产管道,资产管道无法访问您的控制器的实例变量甚至是当前的请求对象,因为在预编译资产时它们将不存在。
您目前的做法是正确的。
每次mp3链接在生产中改变时,javascript application.js会被重新编译吗?
不,这不是资产管道的工作方式,而且正是您无法将动态生成的JavaScript移动到.js.erb
文件中的原因。