我有一个 JavaScript 函数(可用于所有页面,因为它包含在 application.js 中),用于检测浏览器是否支持 Flash 并输出 true 或 false。
现在,如果为 true,我想显示基于 Flash 的价格图表,如果为 false,则显示基于 HTML/Javascript 的图表。
在 Haml 页面的顶部,我尝试将 javascript 函数的结果传递给 HAML,如下所示:
:javascript
if (browserHasFlashSupport())
#{showFlashChart = true}
并在页面下方的 Haml 中使用它,如下所示:
- if showFlashChart
# show flash chart
- else
# show html/js chart
但是我无法让它工作,因为 ruby 变量 showFlashChart 无论如何都是“true” - 但在控制台中,javascript 函数 browserHasFlashSupport() 像它应该的那样返回 true/false,所以我一定做错了什么.
我想这可能是最好的解决方案,直接在 HAML 中使用 javascript 函数“返回 true/false”,例如 - if browserHasFlashSupport()
如果可能的话,并且是“正确”的方法做吗?
非常感谢任何帮助,谢谢:-)
PS。任何关于如何避免在我的 HAML 文件中使用内联 javascript 的提示也将非常受欢迎。最佳答案
您的解决方案存在的问题:
您的 JavaScript 函数必须在客户端浏览器中运行,以检测它是否支持 Flash。
当用户想要从您的网站获取页面时,会发生以下情况:
- 用户的浏览器向您的服务器发送请求。
- 您的服务器处理请求,编译 View (例如 HAML)。
rails 还添加了
<script>
标签到输出 html 页面。这些标签将包含您的脚本的 URL(在application.js
或其他中定义)。然后服务器会使用此 html 页面进行响应。 - 用户的浏览器从您的服务器加载编译后的页面。
- 浏览器看到
<script>
标签并自动从指定的 URL 下载 JavaScript 源。 - 并且现在在客户端浏览器中您的 JavaScript 函数可能会运行。
您会看到您的 haml 模板在第 2 步中呈现,而您的 javascript 函数可能仅在第 5 步中运行。
这是一个非常简单的情况。但不可能使步骤 5 放在步骤 2 之前(不使用 ajax 或 cookies)。这就是为什么你的方法是不可能的。
希望这是相当具有描述性的。
关于javascript - 如何在 Haml 中使用 JavaScript 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24969627/