将变量传递给js.erb文件

时间:2016-03-08 12:42:26

标签: javascript ruby-on-rails ruby jplayer

这是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链接改变生产时重新编译吗?我认为这很糟糕,对吧?

1 个答案:

答案 0 :(得分:0)

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

您目前的做法是正确的。

  

每次mp3链接在生产中改变时,javascript application.js会被重新编译吗?

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