【发布时间】:2026-01-18 08:55:01
【问题描述】:
对于一个非常具体的案例,我需要一些帮助。
我想覆盖特定视图的布局行为。 我确实找到了描述该怎么做的罗德文档。 (本文底部粘贴了一份 Rhodes 文档)
我尝试使用第二种选择(“调用控制器上的布局方法以覆盖默认布局名称”),但没有奏效。 我想我可能误解了如何对控制器进行编码,或者希望只有语法错误...... 在下面查看有关该应用程序的更多信息。
谁能告诉我应该怎么做? 什么是正确的语法? 还是我应该使用其他方法?
提前致谢。
路易斯·德申斯
以下是有关该应用程序的一些信息以及我所做的:
- 简单应用
- 构建适用于 iPhone
- 应用程序在“计算器”视图中启动
- “计算器”视图调用“控制”视图调用“帮助”视图
-
应用结构:
app/ -> index.erb (Control view) -> layout.erb (Standard layout) -> calculatorlayout.erb (Customize layout for Calculator view) -> calculator/ -----> index.erb (Calculator view) -----> calculator_controller.erb (Controller to be able to override layout) -> help/ -----> index.erb (Help view) -
我创建了 Calculator_controller.erb 包含
require 'rho/rhocontroller' require 'helpers/browser_helper' class CalculatorController < Rho::RhoController include BrowserHelper layout :calculatorlayout (Thats what Rhodes doc mentionned to do) 正如我所说,这不起作用。请告诉我正确的做法。
注意:作为临时措施,我将 app/calculatorlayout.erb 复制到 app/calculator/layout.erb 当应用程序在“计算器”视图中启动时,这会正确呈现, 但是如果我导航到“关于”视图并返回到“计算器”视图,则计算器的呈现是使用标准布局完成的。
--------罗德文档---------------------- -------
如果您想覆盖或自定义布局行为,您可以 使用以下参数调用渲染函数:
渲染 :action => 'index', :layout => 'mycustomlayout', :use_layout_on_ajax => false
第一个参数是你想要渲染的动作。接下来是 (可选)布局名称,假定应用程序根为基础 目录。在上面的例子中,Rhodes 会寻找一个名为 应用程序根目录中的“mycustomlayout.erb”(您也可以 使用 :layout => false 禁用布局模板)。这 use_layout_on_ajax 参数告诉 Rhodes 是否使用 Ajax 调用的布局(默认为 false)。
您可以调用控制器上的布局方法来覆盖 默认布局名称:
布局:mycustomlayout
这将强制渲染调用使用 mycustomlayout.erb 代替 此控制器所有操作的默认布局文件。
【问题讨论】: