【问题标题】:How to use JavaScript variable in Haml?如何在 Haml 中使用 JavaScript 变量?
【发布时间】:2014-07-26 09:35:37
【问题描述】:

我有一个 javascript 函数(在所有页面上都可用,因为它包含在 application.js 中),它检测浏览器是否支持 Flash 并输出 true 或 false。

现在,如果为真,我想显示基于 Flash 的价格图表,如果为假,则显示基于 HTML/Javascript 的图表。

在 Haml 页面的顶部,我尝试将 javascript 函数的结果传递给 HAML,如下所示:

:javascript
  if (browserHasFlashSupport())
    #{showFlashChart = true}

然后在页面下方的 Haml 中使用它,如下所示:

- if showFlashChart
    # show flash chart
- else
    # show html/js chart

但我无法让它工作,因为 ruby​​ 变量 showFlashChart 无论如何都是“真” - 但在控制台中,javascript 函数 browserHasFlashSupport() 返回真/假,所以我一定做错了什么.

我想这可能是最好的解决方案,直接在 HAML 中使用 javascript 函数“返回真/假”,如 - if browserHasFlashSupport(),如果可能的话,以及“正确”的做法?

我会很感激任何帮助,谢谢 :-)

PS。任何关于如何避免在我的 HAML 文件中使用内联 javascript 的提示也将非常受欢迎。

【问题讨论】:

  • haml??你是说html??
  • 不,我是说 Haml(如果你不知道 Haml,请参阅 haml.info):)
  • 哎呀!对不起,我第一次听说!
  • 你考虑过使用gon吗? github.com/gazay/gon
  • 感谢@BenjaminSinclaire,但我需要反过来做——将变量/函数输出从 js 发送到 ruby​​ (Haml)。

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


【解决方案1】:

你解决的问题:

您的 javascript 函数必须在客户端的浏览器中运行以检测它是否支持 Flash。

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

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

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

这是一个非常简单的案例。但是不可能使第 5 步先于第 2 步(不使用 ajax 或 cookie)。这就是为什么你的方式是不可能的。

希望这是非常具有描述性的。

【讨论】:

  • 这很有意义。谢谢!我想我会使用 cookie。
猜你喜欢
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多