2

我正在制作非常简单的 ROR (rails 2.3.5) 应用程序并使用 jQuery 插件 jRails。这个想法是在 jQuery youtube 播放器中修改午餐,它将播放 ror 控制器列表中的随机视频。

控制器.rb

    def show
    @clip = Video.find(:all, :select =>'link', :order => 'RANDOM()', :limit => 1).map(&:link)
    respond_to do |format|
      format.html 
     end
  end

显示.html.erb

<div id="random">
<%=@clip%>
</div>

例如,此处的链接只是一个随机的 youtube 链接。跛脚我的问题是如何在这个 jQuery 函数中获取这个变量?

应用程序.js

 $(document).ready(function(){
    $('#player').youTubeEmbed("http://www.youtube.com/watch?v=ZDFlmxmBne8")

});

将非常感谢任何帮助。

4

3 回答 3

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();
});
于 2010-11-28T14:23:12.127 回答
2

假设变量包含 URL,如下所示:

$(document).ready(function(){
    $('#player').youTubeEmbed("<%=escape_javascript(@clip)%>");
});

(抱歉,错过了 JavaScript 与 HTML 不在同一个文件中的事实——也不应该在同一个文件中!)

假设变量包含 URL,如果您不希望显示 URL,可以将其嵌入到页面变量中,如下所示(将divshow.html.erb 中的代码替换为以下内容):

<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变量包含 a"或 a \,您需要确保将 the"转换为\"并且任何单独的反斜杠都转换为\\。Jakub Hampl 很有帮助地指出了此escape_javascript功能,我已将其编辑到代码示例中。

这样做意味着我们要在window. 我让我们的新符号成为一个对象,这样如果我们需要对其他事物执行此操作,我们可以将它们包含在同一个对象中,这样我们就不会在整个地方都有符号(创建大量全局符号 - 这是为了因此,window属性 - 往往会成为维护问题,最好避免)。例如,如果您有两个剪辑:

<script type='text/javascript'>
window.myStuff = {
    someNiftyClip:      "<%=escape_javascript(@clip)%>",
    someOtherNiftyClip: "<%=escape_javascript(@anotherClip)%>"
};
</script>

题外话:在 call 行youTubeEmbed中,注意我在末尾添加了一个分号。最好不要依赖 JavaScript 的分号插入

于 2010-11-28T14:22:29.543 回答
0

您可以将变量放在隐藏字段中,然后可以在 $('#hiddenFieldID').val(); 之类的函数中使用它

于 2010-11-28T14:22:29.707 回答