将变量传递给 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
文件中的原因。
这是 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
文件中的原因。