gpt4 book ai didi

javascript - Rails 中的 ruby​​ vs js 字符串连接

转载 作者:行者123 更新时间:2023-11-29 22:35:50 25 4
gpt4 key购买 nike

所以在我的 Controller 的 show.html.erb 文件中

<% content_for :head do %>
<script type="text/javascript">
var filepath= "/flexpaper/" + <%= @exam.filename.to_s %> + ".swf"

var flashvars = {
SwfFile : escape(filepath), ....

现在这似乎是我使用的变通解决方案,但是当我尝试以另一种方式实现相同的结果时,如下所示

<% content_for :head do %>
<script type="text/javascript">
var filepath= <%= "/flexpaper/" + @exam.filename + ".swf".to_s %>

var flashvars = {
SwfFile : escape(filepath), ....

即用 ruby​​ 而不是 javascript 生成文件路径我收到文件路径的未定义错误。现在我明白这是因为转义,因为它没有将文件路径作为字符串 i.r "stuff.."而是类似 stuff..所以转义错误。但我不明白为什么?有什么想法吗?

P.s- 还有关于 UJS 风格组织的任何建议。我将所有其他 js 驻留在其他文件的某个位置,并根据需要包含在 header 中,除了这个有点动态的。我不能在包含的 js 文件中包含 ruby​​ 代码,也不想像 ryan bates railscast 这样的 javascript Controller 来生成这个小脚本。所以任何其他简单的解决方案。

最佳答案

从本质上讲,您在第二个版本中的 javascript 中缺少引号。 ruby 运行后,生成的页面包含一个带有纯 javascript 的脚本标签。该 javascript 看起来像这样:

var filepath= /flexpaper/some_exam.swf
var flashvars = {
SwfFile : escape(filepath), ....

请注意,您正在为文件路径变量分配一个值,但它没有被引号括起来。它不是有效的 javascript。如果你这样修复它,它应该可以工作:

<% content_for :head do %>
<script type="text/javascript">
var filepath= "<%= "/flexpaper/" + @exam.filename + ".swf".to_s %>";
var flashvars = {
SwfFile : escape(filepath), ....

当我这样做时,我添加了一个分号并修复了您的缩进——您会发现正确缩进您的 javascript 代码可以使调试更容易几个数量级。该 ruby​​ 代码将生成如下所示的 javascript:

  <script type="text/javascript"> 
var filepath= "/flexpaper/some_exam.swf";
var flashvars = {
SwfFile : escape(filepath), ....

发现此类错误的一个技巧是在浏览器中查看源代码,然后仔细查看正在生成的 javascript。

关于javascript - Rails 中的 ruby​​ vs js 字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5141272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com