假设变量包含 URL,如下所示:
$(document).ready(function(){
$('#player').youTubeEmbed("<%=escape_javascript(@clip)%>");
});
(抱歉,错过了 JavaScript 与 HTML 不在同一个文件中的事实——也不应该在同一个文件中!)
假设变量包含 URL,如果您不希望显示 URL,可以将其嵌入到页面变量中,如下所示(将div
show.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 的分号插入。