2010-11-28 30 views
0

对不起,我是Ruby on Rails的新手。我对这个大图很困惑,所以你的帮助将不胜感激。如何访问只能通过局部访问的导轨变量?

在我的application.html.haml中,我调用了= yield,它的输出来自ranking.html.haml。现在,后者可以访问rails变量@featured_image。

我想要做的是在页面加载时获得这个栏变量@featured_image,这样我就可以在该页之前预先加载该图像和图像。

但我在window.onload =在application.html.haml()函数没有访问@featured_image ...

我该怎么办呢??

谢谢!

回答

1

正如Chris Heald指出的那样,@featured_image变量是控制器上的一个实例变量,您可以在视图中访问它。从JavaScript使用它,你就基本上需要做的就是它在这样一个脚本块写入到您的布局或部分地方(这是ERB,不HAML):

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

很明显,你会希望在@featured_image中添加对nil值的检查,并以适合您的应用的方式对其进行处理,或者确保其始终设置为某些内容。克里斯的建议使用助手也是一个很好的建议,但我不确定帮助者需要为新手做些什么是显而易见的。

1

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

我建议使用助手方法检查以确保它不是零,然后写出正确的标记。您也可以看看content_for,它可让您标记要在布局的其他部分渲染的标记块。

+0

谢谢克里斯。 @featured_image是由一个控制器设置的,该控制器生成视图:ranking.html.haml ...但是,这并没有真正回答我如何从主应用程序访问它的问题。我不认为content_for适用于这种情况下,我并没有真正渲染一个视图...我只是想在页面加载运行某个js函数来访问此变量。 – mtay 2010-11-28 02:29:24