Layout Rhodes Rhomobile-覆盖特定视图的布局行为

Layout Rhodes Rhomobile-覆盖特定视图的布局行为,layout,rhomobile,rhodes,Layout,Rhomobile,Rhodes,我需要一个非常具体的案例的帮助 我想覆盖特定视图的布局行为。 我确实找到了描述该做什么的罗兹文档。 (Rhodes文档的副本粘贴在本文底部) 我尝试使用第二种方法(“在控制器上调用layout方法以覆盖默认布局名称”),但没有成功。 我想我可能误解了如何对控制器进行编码,或者希望只有语法错误。。。 请参阅下面有关应用程序的更多信息 谁能告诉我该怎么做? 正确的语法是什么? 还是我应该用另一种方法 提前谢谢 路易斯·德斯切内 以下是有关该应用程序和我所做工作的一些信息: 简单应用 这个版本是为i

我需要一个非常具体的案例的帮助

我想覆盖特定视图的布局行为。 我确实找到了描述该做什么的罗兹文档。 (Rhodes文档的副本粘贴在本文底部)

我尝试使用第二种方法(“在控制器上调用layout方法以覆盖默认布局名称”),但没有成功。 我想我可能误解了如何对控制器进行编码,或者希望只有语法错误。。。 请参阅下面有关应用程序的更多信息

谁能告诉我该怎么做? 正确的语法是什么? 还是我应该用另一种方法

提前谢谢

路易斯·德斯切内

以下是有关该应用程序和我所做工作的一些信息:
  • 简单应用
  • 这个版本是为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)
    
    需要“rho/rho控制器”
    需要“助手/浏览器\助手”
    类计算器控制器
  • 正如我所说,这是行不通的。请告诉我正确的方法

  • 注意:作为临时测量,我将app/calculatorlayout.erb复制到app/calculator/layout.erb中 这会在应用程序在“Caculator”视图中启动时正确渲染, 但是,如果我导航到“关于”视图并返回到“计算器”视图,则计算器的渲染将使用标准布局完成

--------罗德文件--------------------------------------------

如果要替代或自定义布局行为,可以 使用以下参数调用渲染函数:

render:action=>index', :layout=>mycustomlayout',:在\u ajax上使用\u layout=>false

第一个参数是要呈现的操作。接下来是 (可选)布局名称,以应用程序根为基础 目录在上面的示例中,Rhodes将查找一个名为 应用程序根目录中的“mycustomlayout.erb”(您也可以 use:layout=>false禁用布局模板的使用)。这个 use_layout_on_ajax参数告诉Rhodes是否使用 Ajax调用上的布局(默认值为false)

您可以在控制器上调用layout方法来覆盖 默认布局名称:

布局:mycustomlayout

这将强制渲染调用使用mycustomlayout.erb代替 此控制器所有操作的默认布局文件



在控制器中,需要指定操作方法。动作的
render
方法处理
layout
属性。不能简单地为整个控制器指定布局。下面是一个示例控制器文件。然后需要一个
index.erb
视图文件来对应
index
操作方法

计算器控制器.rb

require 'rho/rhocontroller'
require 'helpers/browser_helper'

class CalculatorController < Rho::RhoController
    include BrowserHelper

    def index
        # perform any logic or fetch objects for the index.erb view

        render :action => :index, :layout => 'calculatorLayout'
    end

end
需要“rho/rho控制器”
需要“助手/浏览器\助手”
类计算器控制器:index,:layout=>“calculatorLayout”
终止
终止

不幸的是,罗兹有可怕的文档,所以它的机制很难解读。但我必须指出,不幸的是,杰弗里在这一点上完全错了:

不能简单地为整个控制器指定布局

实际上,您可以简单地为控制器指定布局。有很多种方法,但具体来说,你可以像文件中提到的那样去做,只是不能像《理想主义者》那样尝试。如果您在
render.rb
中检查源代码,您会注意到
RhoController
为此定义了一个setter方法,这是一种基本的Ruby机制

def self.layout(name)
  @layout = name
end
因此,您可以在控制器内使用
self.layout=:layout\u name
@layout=:layout\u name
来定义默认布局。我不知道如何覆盖它的复杂性,但这种技术将允许您为任何控制器设置默认布局。我自己测试过

RhoController
中还有一个检索布局名称的方法,如果您想自定义选择布局的行为,您当然可以在自己的控制器中重写该方法

def self.get_layout_name
  @layout.nil? ? 'layout' : @layout
end