夜的第七章

ASP.NET、C#、.NET开发资源、Javascript等等为主的开发备注收藏注意警告等的一个个人博客。

« 入门Ruby(3):Open SUSE11上的RoR环境配置弱弱地收藏一个分割线样式 »

入门ruby(4):rails中的网页模板

rails 中的模板都放在app/views/layouts/下。模板后缀是rhtml和erb都可以,但以erb为先,如果已有一个erb后缀的模板,则不再找rhtml。

模板留给子页显示的地方用yield来标识,如<%= yield %>,这样子也内容都会在这个位置显示。

rails自动是按名称来套的。比如如果模板名字叫application.erb,那rails默认把它当作全局模板,站内所有页面都会套用这个模板。

如果把名字命名成controller的名字,如controller say,如果命名成say,则默认controller say下的所有页面都会应用这个模板。如果定义的模板名称既不是application,又不是controller名称,怎么让某一页面套用这个模板呢?在controller中定义可以实现。比如模板页叫speak.erb,而想让controller say下所有页是套用,则在say的controller类内声明下:

layout ’speak’

这样rails会在layouts目录寻找这个文件。

如果想用代码控制根据条件使用不同的模板,则可以定义一个方法(名称随意):

def  GetLayOut

          if XX return ’say’ else return ’speak’ end

end

然后把类内的声明换成这个方法的名字(注意加冒号):

layout :GetLayout

注意这个不带引号,说明不是字符串了。

如果针对某个action使用特定的模板,则可以在action内声明。比如有个action是/say/langEN,想试用speak,而say下其他页则可能不用,则在action langEN下定义如下:

render:layout => ’speak’

这样就可以使这个action套用speak模板了。

render:layout=>也可以指定方法来使用模板,不过要注意在=>要跟冒号,然后再跟方法名。

注意:layout 和rander:layout=>是两个专有命令,前者在class内声明,后者在action内声明,不可混用。

总结下:

  1. 全局模板:名称固定:application
  2. controller模板:名称固定,同controller名称。
  3. 自定义模板(名字同controller不同),包括4种定义方法:
    3.1.    在controller中定义:
             3.1.1.    layout ‘模板名’(注意中间没冒号,模板名两边有引号,表示文件名)
             3.1.2     layout :方法名(注意中间有冒号,方法名两边没引号,标识方法)
    3.2    在 action中定义:
              3.2.1.    render:layout=> ‘模板名’(注意中间没冒号,模板名两边有引号,表示文件名)
             3.2.2     render:layout=>:方法名(注意中间有冒号,方法名两边没引号,标识方法)

这样细分起来可以算作六种方法可实现。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog 1.8 Arwen Build 81206



©2007 - 2010 www.leadnt.com 保留一些权利吧