【问题标题】:How do I access a rails variable that is only accessible to a partial?如何访问只能部分访问的 rails 变量?
【发布时间】:2011-05-16 17:29:09
【问题描述】:

对不起,我是 Ruby on Rails 的新手。我对大局感到非常困惑,因此我们将不胜感激。

在我的 application.html.haml 中,我调用 =yield,它从ranked.html.haml 获取输出。现在,后者可以访问 rails 变量 @featured_image。

我想要做的是在页面加载时获取这个rails变量@featured_image,这样我就可以在之后立即预加载该图像和带有id的图像。

但我在 application.html.haml 中的 window.onload = function() 无法访问@featured_image...

我该怎么做??

谢谢!!

【问题讨论】:

    标签: javascript ruby-on-rails ruby ajax


    【解决方案1】:

    正如 Chris Heald 所说,@featured_image 变量是控制器上的一个实例变量,您可以在视图中访问它。要从 javascript 中使用它,您基本上需要做的就是将其写入您的布局或部分脚本块中的某个位置(这是 erb,而不是 haml):

    <script>
      var featured_image="<%= @featured_image %>";
    </script>
    

    显然,您需要在@featured_image 中添加对 nil 值的检查,并以适合您的应用的方式处理它,或者确保它始终设置为某个值。 Chris 使用助手的建议也是一个不错的建议,但我不确定助手需要为新手做什么是显而易见的。

    【讨论】:

      【解决方案2】:

      如果@featured_image 是从控制器设置的,它将对渲染管道中的所有视图可见。但是,您不一定总是假设它是可见的,因为布局可能会呈现许多页面,因此您需要在尝试从布局中使用它之前检查它是否存在。

      我建议使用辅助方法来检查以确保它不为零,然后写出正确的标记。您还可以查看content_for,它可以让您标记要在布局的其他部分呈现的标记块。

      【讨论】:

      • 谢谢克里斯。 @featured_image 是从生成视图的控制器设置的:ranked.html.haml ...但是,这并不能真正回答我如何从我的主应用程序访问它的问题。我不认为 content_for 在这种情况下适用,而且我并没有真正呈现视图......我只是希望在页面加载时运行的某个 js 函数能够访问这个变量。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多