我正在制作非常简单的ROR(rails 2.3.5)应用程序并使用jQuery插件jRails。想法是在jQuery youtube播放器中修改午餐,它将播放来自ror控制器列表的随机视频。
controller.rb
def show
@clip = Video.find(:all, :select =>'link', :order => 'RANDOM()', :limit => 1).map(&:link)
respond_to do |format|
format.html
end
end
show.html.erb
<div id="random">
<%=@clip%>
</div>
此处的链接只是一个随机的YouTube链接。跛脚的问题是如何在这个jQuery函数中获取这个变量?
的application.js
$(document).ready(function(){
$('#player').youTubeEmbed("http://www.youtube.com/watch?v=ZDFlmxmBne8")
});
非常感谢任何帮助。
答案 0 :(得分:4)
保留rails代码并使用jQuery:
$(document).ready(function(){
$('#player').youTubeEmbed($('#random').text())
});
为了增强可访问性,我将erb更改为:
<div id="random">
<%=link_to h(@clip), h(@clip) %>
</div>
然后是js:
$(document).ready(function(){
$('#player').youTubeEmbed($('#random a').attr('href'));
$('#random').hide();
});
答案 1 :(得分:2)
假设变量包含URL,如下所示:
$(document).ready(function(){
$('#player').youTubeEmbed("<%=escape_javascript(@clip)%>");
});
(很抱歉,错过了JavaScript与HTML不在同一个文件中的事实 - 它也不应该!)
假设变量包含URL,如果您不想显示该URL,则可以将其嵌入页面变量中(使用以下内容替换show.html.erb中的div
代码):
<script type='text/javascript'>
window.myStuff = {
clipUrl: "<%=escape_javascript(@clip)%>"
};
</script>
...(或
<script type='text/javascript'>
var myStuff = {
clipUrl: "<%=escape_javascript(@clip)%>"
};
</script>
......这几乎是一回事。)
...然后你可以像这样使用它:
$(document).ready(function(){
$('#player').youTubeEmbed(window.myStuff.clipUrl);
});
以这种方式输出变量的值时,您需要确保写出的内容最终成为有效的JavaScript。例如,如果@clip
变量包含"
或\
,则需要确保将"
变为\"
并且任何单独的反斜杠都变为\\
。 Jakub Hampl帮助指出了escape_javascript
函数,我已经编辑了代码示例。
这样做意味着我们在window
上添加了一个新符号。我把我们的新符号作为一个对象,这样如果我们需要用其他东西做这个,我们可以将它们包含在同一个对象中,这样我们就不会在整个地方都有符号(创建大量的全局符号 - 这就是所以,window
属性 - 往往成为维护问题,最好避免)。例如,如果您有两个剪辑:
<script type='text/javascript'>
window.myStuff = {
someNiftyClip: "<%=escape_javascript(@clip)%>",
someOtherNiftyClip: "<%=escape_javascript(@anotherClip)%>"
};
</script>
偏离主题:在调用youTubeEmbed
的行中,请注意我在末尾添加了分号。最好不要依赖JavaScript的semicolon insertion。
答案 2 :(得分:0)
您可以将变量放在隐藏字段中,然后可以在$('#hiddenFieldID')等函数中使用它.val();