- 浏览: 345612 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
springdata_spring:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
使用Maven管理Android项目(一) -
snowfigure:
snowfigure 写道我专门登陆上来,就是想问问,这个Ve ...
IntelliJ IDEA 生成注册码源程序 -
snowfigure:
我专门登陆上来,就是想问问,这个Version有啥鸟用?定义完 ...
IntelliJ IDEA 生成注册码源程序 -
非诚勿扰男嘉宾:
引用整个包就好了,不用具体类
androidannotations Eclipse下报引用不到框架生成类错误的解决方案 -
jf_emal:
至于大数据量时导致图表渲染慢的问题,可以通过改变业务逻辑及交互 ...
报表展示组件Highcharts与Fusioncharts的对比
本文将讨论 RoR 中提供的基础服务之一:动作视图。动作视图可以使你更快速地将数据展现给用户。在本文中将介绍一些动作视图的服务,并且将举一个例子来说明如何使用动作视图。
在 MVC 模式中的 V ,即视图 (View) ,它的作用是将数据以用户所需要的形式展现出来,和传统的模式不同的是,视图在展现数据时可以省去许多不必要的细节。也就是说,任何基于 MVC 模式的框架 (framework) 都应该提供更容易的方法提取和显示需要的数据。 RoR 就是这样的框架。它将动作视图作为其核心组件之一。
在本文中,将主要讨论动作视图的基础服务。第一部分介绍了和动作视图相关的服务。在第二和第三部分讨论动作视图的一些基本功能,在最后一部分,将给出一个实例来说明如何使用动作视图。
动作视图的服务
视图的功能就是向用户展现数据。下面列举了动作视图中的主要服务:
· 模板
· 布局
· 分页
当然,在动作视图中还在很多的服务,但上面的三个服务在动作视图中是最重要的。
模板
所谓模板,就是在一个文件中预定义了一些共用的资源,应用程序通过使用这些共用的资源,可以简化应用程序的开发过程,从而达到重用的目的。在动作视图中的模板所包含的资源主要就是布局信息、一些数据所存放的路径等。在动作视图中的模板很多,如 HTML 格式的登录模板、以及 Email 模版等。
布局
从软件(包括 Web 和桌面程序)上来说,布局就是将 GUI 中的控件进行组织和安排,也就是说布局控制着 GUI 控件(如按钮、文本框等)如何被放置在界面上。例如,布局可通过垂直等间距方式将要排列的控件按垂直方向等间距进行排列。
分页
分页的作用就是将大量的数据分批地显示在页面上,可通过 " 上一页 " 和 " 下一页 " 进行页间的切换。分页有些象用打印机打一个大的文档,一张纸打不下,就将数据分成多张纸来打。虽然将分页这种显示数据的方式应用到程序中可以解决大数据量显示的问题,但这同时又会带来另外一个问题,那就是如果对数据进行导航,也就是翻页问题。
除了以上提到的服务外,在动作视图中还有其它的服务,如格式化助手等。但是上面所介绍的三个服务是动作视图中最重要的。在下一部分,我们将讨论如何使用这些服务。
模板和格式化助手
动作视图为我们提供了很多建立动态视图的服务。下面是动作视图提供的主要的服务:
· 模版
· 格式化助手
· 分页
· 布局
上面的 4 种服务,除了格式化助手外,其它三个服务都已经在前面介绍过了。
1.模板
就象以前讨论的一样,在模板中包含了一些代码、标记、简单文本或它们的组合。在其中的代码可以通过 Controller 中的访问信息提供动态的内容。代码通过执行环境访问信息。这个环境为代码提供了以下的信息:
1. Controller 的实例变量,通过这些变量可以将数据从 Controller 传给模板。
2. 作为存取器的 Controller 对象。这些对象包括对象头、参数、请求、响应和会话。
3. 当前正在使用的 Controller 对象。模板代码可以从这个 Controller 对象中调用它的 public 方法。
在 RoR 中的模板是 RHTML 文件。 RHTML 文件有些类似于 JSP 文件,在 RHTML 文件中有静态的 HTML ,也有动态的内容。动态的内容可以由内嵌的代码生成技术产生,也可以用手工编写。如以下的 RHTML 文件显示了当前的日期和时间:
和 JSP 类似,在 RHTML 中有两种写动态代码的方法,一种是将代码写到< %= … % >中,另外一种是将代码写在< % … % >中。在< %= … % >中的 Ruby 语句只是当作一个值返回,如果其中含有多条语句,则返回最后一条语句的值。而将代码放到< % … % >中,则按着正常的程序逻辑执行。虽然 RHTML 中可以执行 Ruby 语句,但最好不要将商业逻辑代码写在 RHTML 中。代码的执行原理可看下面的例子。
如果有以下代码:
< % 5.times do % >
< 5 > < % end % > |
在执行 RHTML 时,将上述代码转换为 Ruby 语句:
5.times do
puts " < 5 > " end |
视图的一个重要功能就是可以将从 Controller 传过来的数据进行格式化,以便用户更容易理解这些数据。 RoR 提供的格式化助手就是用来完成这个功能的。格式化助手主要可以格式化三类信息:数字、日期和文本。下面将讨论如何使用格式化助手对这些信息进行格式化。
数字和日期格式化
格式化助手可以进行多种的转换工作,如将本地时间转换成另外一种形式,将数字转换成货币类型、百分比或电话号,下面是一些转换的例子: < %= distance_of_time_in_words(Time.now, Time.local(2006, 11, 1)) % >
将得到 4 或其它的数字(根据你运行它的日期不同而不同)
< %= distance_of_time_in_words(Time.now, Time.now + 40, false) % >
|
将得到 1 分钟( 40 表示秒)
< %= number_to_currency(99.99) % >
|
将得到 $99.99
< %= number_to_percentage(66.6666) % >
|
将得到 66.667%
< %= number_to_percentage(66.66666, :precision = > 1) % >
|
将得到 66.7%
< %= number_to_phone(1125551212) % >
|
将这个数字转换为 112-555-1212
格式化文本
同样,格式化助手也可以格式化文本。格式化操作包括截取字符串,加亮显示字符串中的子字符串,甚至可以将一个单词转换成复数。下面是一些字符串的例子:
替换字符串的子串
< %= excerpt(@str, "you", 8) % >
|
如果 @str 中的字符串是 "I love …" ,那么就应该返回 "I love you"
< %= highlight(@str, "love") % >
|
如果 @str 中的字符串是 "I love you."
那应该显示:
I < strong class="highlight" > love < /strong > you.
|
在字符串转换中,最有意思转换可能就是将英文单词的单数形式转换成复数形式(你可以用这个功能查一下单词的复数形式是什么)。
< %= pluralize(2, "person") % >
|
显示 2 people.
3.分页
在第一部分我介绍了分页的概念。在这部分我将讨论如何通过 RoR 使分页变得更容易。 RoR 通过控制层和视图层实现分页。在控制层, RoR 的分页系统控制从数据库中得到的记录。在视图层显示从控制层得到的数据,以及用于分页显示的导航条。下面的例子描述了将 users 表分页显示的过程:
控制层的实现:
在控制层,分页必须按如下代码实现:
def user_list
@user_pages, @users = paginate(:users, :order_by = > 'name') end |
以上代码通过 paginate 方法设置的分页器。这个方法有两个参数,第一个参数是要读取数据的表的名子,第二个参数是在取数据时要排序的字段。这个方法返回两个对象,第一个对象 @user_pages 是分页器对象, 第二个对象 @users 是每一页的记录数。其中 @users 用来向视图提供要显示的数据。 而 @user_pages 负责从表中得到数据,然后将这些数据保存在 @users 中。
视图层的实现 :
在视图层的 RHTML 文件中, @users 中的数据将被展现给用户。 pagination_links() 方法可以实现导航的功能。以下是具体的实现代码:
< table >
< tr >< th >姓名< /th >< /tr > < % for user in @users % > < tr >< td >< %= user.name % >< /td > < % end % > < /table > < hr > < %= pagination_links(@user_pages) % > < hr > |
在模板中可以通过布局提供子模板。这就意味着 RoR 可以通过布局进行嵌套操作。布局提供了一个典型 网页 的各种组成部分,如菜单、页脚等。下面是一个简单的关于布局的例子。
< head >
< title > Form: < %= controller.action_name % >< /title >
< %= stylesheet_link_tag 'scaffold' % >
< /head >
< body >
< %= @content_for_layout % >
< /body >
< /html >
上面的代码是一个标准的 HTML 布局。最值得关注的是变量 @content_for_layout 。这个变量中保存了从控制层传过来的数据。下面代码演示了如何从控制层传递数据到一个 RHTML 文件:
@msg =" 测试 !"
end
下面是 method.rhtml 文件中的代码:
变量 @content_for_layout 的内容如下:
由布局生成的 HTML 代码如下:
< head >
< title > Form: method < /title >
< link href="/stylesheets/scaffold.css" media="screen" rel="Stylesheet" type="text/css"/ >
< /head >
< body >
< h1 >测试 ! < /h1 >
< /body >
< /html >
上面的例子只是简单地演示了如何使用布局。在 RoR 提供的自动生成代码机制中的 scaffold 就是使用布局来生成的输出文件。在下一部分将给一个简单的例子来演示如何使用模板和格式化技术。
实例
在这个例子中显示了一些被格式化的时间、字符串和数字。
下面的代码是控制层的代码:
def hello
@time=Time.now
end
end
下面是视图层(这个文件就是一个模板)的代码:
< head >
< title >你好 ! < /title >
< /head >
< body >
< h1 >现在报时:< %=@time% >< /h1 >
< /body >
< /html >
现在让我们使用格式化功能:
def hello
@time=Time.now
@rule="This is a rule"
@price=123
end
end
下面在视图中使用格式化助手进行格式化:
< html >
< head >
< title >你好 ! < /title >
< /head >
< body >
< br >现在报时:< %=@time% >
< br >时间间隔:< %= distance_of_time_in_words(@time, Time.local(2006, 10, 11)) % >
< br >高亮度显示 rule :< %= highlight(@rule, "rule") % >
< br >将 123 转换成美元:
< %= number_to_currency(@price) % >
< /body >
< /html >
发表评论
-
[转]ubuntu12.04搭建ruby on rails 环境
2012-05-14 10:28 1292经过几天的实验,终于 ... -
从JUnit到Rspec的尝试
2012-05-02 17:42 1577如今,各种测试框架层 ... -
rails走验证和不走验证方法汇总
2012-04-19 16:00 2017之前有一篇文章写到,在使用update_attribute方法 ... -
rvm实用指南(四)——切换ruby1.9.3报错
2012-04-18 22:11 728用RVM安装ruby后,运行ruby 1.9.3 ... -
rvm实用指南(三)——安装ruby1.9.3报错
2012-04-17 15:52 1505今天在用rvm install 1.9.3时,报了些莫 ... -
rails中单独更新某一属性,不走model层的validate
2012-04-10 17:18 1545在做Rspec测试时,有一用例如下 desc ... -
ruby--Hash方法汇总(转)
2012-03-27 16:53 1456一。给Hash添加默认值 : Ruby代码 ... -
Rails中数据库查询分组的几种方式
2012-03-06 11:47 1807方式一: ruby代码方式: machine_group ... -
推荐 Gem 列表(转)
2012-02-20 16:20 673详情请见: http://ruby-china.org/wik ... -
搭建redmine过程中遇到的问题
2012-02-06 16:13 1333最近想搭建一下redmine,好学习一下这个开源源码。 但 ... -
安装特定版本的rails
2012-02-03 11:52 799gem install rails --version=< ... -
rvm实用指南(二)(转)
2012-02-03 11:48 1429RVM简介 Ruby Version Manager,Ru ... -
rvm实用指南(一)(转)
2012-02-02 21:07 1045rvm是一个命令行工具,可以提供一个便捷的多版本r ... -
rails中怎么把小数取成两位的小数(四舍五入)?
2011-10-10 13:07 166222.1231234.round(2) (" ... -
Ubuntu下bundle install报错
2011-09-28 15:56 3858Ubuntu下bundle install命令报错 / ... -
Ubuntu下rvm使用的几个命令
2011-09-28 15:32 892在删除bundler gem包时出现错误,解决措施如下: ... -
Rails读写分离实现
2011-08-30 11:17 1890报表组件读写分离实现 由于Kelude数据量不断增大 ... -
ruby on rails如何将时间段换算成天数
2011-08-25 11:23 1865#将时间点做差,并转换成天数 time = (" ... -
.nil? , .empty?, .blank? .present? 的区别(转)
2011-08-23 20:46 849首先这三个都是判空的。 而 .nil? 和 .empty? ... -
由表及里解析Rails路由(转)
2011-07-14 21:53 1265转自 http://hlee.iteye.com/bl ...
相关推荐
Ruby on Rails:Rails框架入门.docx
Ruby on Rails:Rails与JavaScript集成.docx
Ruby on Rails:Rails中的表单处理.docx
Ruby on Rails:部署Rails应用至Heroku.docx
Ruby on Rails:Rails中的测试驱动开发.docx
Ruby on Rails:Rails中的控制器编写.docx
Ruby on Rails:Rails性能优化与缓存策略.docx
Ruby on Rails:RESTful设计原则.docx
Ruby on Rails:路由系统详解.docx
Ruby on Rails:MVC架构理解.docx
### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...
Ruby on Rails:ActiveRecord模型操作教程.docx
《Ruby on Rails: Up and Running》是一本针对初学者和有经验开发者的技术书籍,它深入浅出地介绍了如何使用Ruby on Rails框架构建Web应用程序。Ruby on Rails(简称Rails)是基于Ruby编程语言的一个开源Web应用框架...
Ruby on Rails:数据库设计与迁移教程.docx
Ruby on Rails:视图层HTML与ERB教程.docx
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
### Ruby on Rails 101:深入理解与实践 #### 引言 《Ruby on Rails 101》是一本介绍Ruby on Rails(简称RoR或ROR)的基础书籍,旨在为初学者提供一个全面而深入的学习框架。本书由Peter Marklund编写,包含了五天...
《Ruby on Rails Tutorial》中文版(原书第2版,涵盖 Rails 4) Ruby 是一门很美的计算机语言,其设计原则就是“让编程人员快乐”。David Heinemeier Hansson 就是看重了这一点,才在开发 Rails 框架时选择了 Ruby...
Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。Rails以其“约定优于配置”(Convention over Configuration)...
Ruby on Rails是一款基于Ruby语言的开源Web开发框架,它遵循MVC(模型-视图-控制器)架构模式,简化了Web应用的开发流程。在Linux环境下安装Ruby on Rails需要一系列的依赖包和步骤,本资源包提供了所需的所有组件,...