如何在Haml中使用JavaScript变量?

如何在Haml中使用JavaScript变量?,javascript,ruby-on-rails,ruby,ruby-on-rails-4,haml,Javascript,Ruby On Rails,Ruby,Ruby On Rails 4,Haml,我有一个javascript函数(在application.js中包含的所有页面上都可以使用),它可以检测浏览器是否支持Flash并输出true或false 现在,如果为真,我想显示一个基于flash的价格图表,如果为假,则显示一个基于HTML/Javascript的图表 在Haml页面的顶部,我尝试将javascript函数的结果传递给Haml,如下所示: :javascript if (browserHasFlashSupport()) #{showFlashChart = tr

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

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

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

:javascript
  if (browserHasFlashSupport())
    #{showFlashChart = true}
- if showFlashChart
    # show flash chart
- else
    # show html/js chart
在页面下方的Haml中使用它,如下所示:

:javascript
  if (browserHasFlashSupport())
    #{showFlashChart = true}
- if showFlashChart
    # show flash chart
- else
    # show html/js chart
但我无法让它工作,因为ruby变量showFlashChart无论如何都是“true”——但在控制台中,javascript函数browserHasFlashSupport()会像应该的那样返回true/false,所以我一定是做错了什么

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

非常感谢您的帮助,谢谢:-)


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

您的解决方案的问题:

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

以下是当用户希望从您的站点获取页面时发生的情况:

  • 用户的浏览器向服务器发送请求
  • 您的服务器处理请求,编译视图(例如HAML)。 rails还将
    标记添加到输出html页面。这些标记将包含指向脚本的URL(在
    application.js
    或其他文件中定义)。然后服务器用这个html页面进行响应
  • 用户的浏览器从服务器加载已编译的页面
  • 浏览器会看到
    标记,并自动从指定的URL下载javascript源
  • 现在才可以在客户端浏览器中运行javascript函数
  • 您可以看到,haml模板是在步骤2中呈现的,javascript函数可能只在步骤5中运行

    这是一个非常简单的例子。但是不可能将步骤5放在步骤2之前(不使用ajax或Cookie)。这就是为什么你的方式是不可能的


    希望这是非常描述性的。

    您的解决方案的问题:

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

    以下是当用户希望从您的站点获取页面时发生的情况:

  • 用户的浏览器向服务器发送请求
  • 您的服务器处理请求,编译视图(例如HAML)。 rails还将
    标记添加到输出html页面。这些标记将包含指向脚本的URL(在
    application.js
    或其他文件中定义)。然后服务器用这个html页面进行响应
  • 用户的浏览器从服务器加载已编译的页面
  • 浏览器会看到
    标记,并自动从指定的URL下载javascript源
  • 现在才可以在客户端浏览器中运行javascript函数
  • 您可以看到,haml模板是在步骤2中呈现的,javascript函数可能只在步骤5中运行

    这是一个非常简单的例子。但是不可能将步骤5放在步骤2之前(不使用ajax或Cookie)。这就是为什么你的方式是不可能的


    希望这是非常描述性的。

    您的解决方案的问题:

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

    以下是当用户希望从您的站点获取页面时发生的情况:

  • 用户的浏览器向服务器发送请求
  • 您的服务器处理请求,编译视图(例如HAML)。 rails还将
    标记添加到输出html页面。这些标记将包含指向脚本的URL(在
    application.js
    或其他文件中定义)。然后服务器用这个html页面进行响应
  • 用户的浏览器从服务器加载已编译的页面
  • 浏览器会看到
    标记,并自动从指定的URL下载javascript源
  • 现在才可以在客户端浏览器中运行javascript函数
  • 您可以看到,haml模板是在步骤2中呈现的,javascript函数可能只在步骤5中运行

    这是一个非常简单的例子。但是不可能将步骤5放在步骤2之前(不使用ajax或Cookie)。这就是为什么你的方式是不可能的


    希望这是非常描述性的。

    您的解决方案的问题:

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

    以下是当用户希望从您的站点获取页面时发生的情况:

  • 用户的浏览器向服务器发送请求
  • 您的服务器处理请求,编译视图(例如HAML)。 rails还将
    标记添加到输出html页面。这些标记将包含指向脚本的URL(在
    application.js
    或其他文件中定义)。然后服务器用这个html页面进行响应
  • 用户的浏览器从服务器加载已编译的页面
  • 浏览器会看到
    标记,并自动从指定的URL下载javascript源
  • 现在才可以在客户端浏览器中运行javascript函数
  • 您可以看到,haml模板是在步骤2中呈现的,javascript函数可能只在步骤5中运行

    这是一个非常简单的例子。但是不可能将步骤5放在步骤2之前(不使用ajax或Cookie)。这就是为什么你的方式是不可能的


    希望这是很有描述性的。

    haml??你是说html不,我是说Haml(如果你不知道的话)