繁体   English   中英

如何在Haml中使用JavaScript变量?

[英]How to use JavaScript variable in Haml?

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

现在,我想显示一个基于Flash的价格图表(如果为true),以及一个基于HTML / Javascript的图表(如果为false)。

在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. 您的服务器处理请求, 编译视图(例如HAML) Rails还将<script>标记添加到输出html页面。 这些标记将包含您脚本的URL(在application.js或其他文件中定义)。 然后,服务器以该html页面响应。
  3. 用户的浏览器从您的服务器加载已编译的页面。
  4. 浏览器将看到<script>标记,并自动从指定的URL下载javascript源。
  5. 并且只有现在在客户端浏览器中, 您的javascript函数才能运行

您会看到您的haml模板是在步骤2上呈现的,并且您的javascript函数可能仅在步骤5上运行。

这是一个简化的案例。 但是不可能将步骤5置于步骤2之前(不使用Ajax或cookie)。 这就是为什么你的方法是不可能的。

希望这是描述性的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM