将变量传递给 js.erb 文件

passing variable to js.erb file

这是 jplayer 的代码:

songs/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 link 时重新编译生产变化?我觉得这样不好吧?

您不能将控制器中的数据推送到资产管道中,资产管道无法访问控制器的实例变量甚至当前请求对象,因为在预编译资产时它们将不存在。

您目前的做法是正确的。

is the javascript application.js going to be re-compiled every time the mp3 link change in production?

不,资产管道不是这样工作的,这正是您无法将动态生成的 JavaScript 移动到 .js.erb 文件中的原因。