javascript - 如何在 Haml 中使用 JavaScript 变量?

标签 javascript ruby-on-rails ruby ruby-on-rails-4 haml

我有一个 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。

当用户想要从您的网站获取页面时,会发生以下情况:

  1. 用户的浏览器向您的服务器发送请求。
  2. 您的服务器处理请求,编译 View (例如 HAML)rails 还添加了 <script>标签到输出 html 页面。这些标签将包含您的脚本的 URL(在 application.js 或其他中定义)。然后服务器会使用此 html 页面进行响应。
  3. 用户的浏览器从您的服务器加载编译后的页面。
  4. 浏览器看到 <script>标签并自动从指定的 URL 下载 JavaScript 源。
  5. 并且现在在客户端浏览器中您的 JavaScript 函数可能会运行

您会看到您的 haml 模板在第 2 步中呈现,而您的 javascript 函数可能仅在第 5 步中运行。

这是一个非常简单的情况。但不可能使步骤 5 放在步骤 2 之前(不使用 ajax 或 cookies)。这就是为什么你的方法是不可能的。

希望这是相当具有描述性的。

关于javascript - 如何在 Haml 中使用 JavaScript 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24969627/

相关文章:

javascript - Facebook 更改页面 URL 但实际上并未更改页面

javascript - 无法在 Microsoft Edge 浏览器的外部文件中运行 JavaScript

ruby-on-rails - 我应该如何测试条件验证?

ruby-on-rails - Rails 5 是否依赖于 Git?

javascript - Ruby On Rails - 在使用 require.js 时我需要一个 javascript 文件通过 ruby

arrays - Ruby - 哈希数组到 CSV

javascript - select2 ruby​​ on Rails 5 不起作用

java - 在 java 中执行 javascript - 打开 URL 并获取链接

javascript - Chrome 扩展内容页面的 wicked-good-xpath

ruby-on-rails - 如何更新模型属性的值