首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

动态类型语言中的 Web 开发策略(2)调用模板

动态类型语言中的 Web 开发策略(2)调用模板

调用模板Ruby 是一系列处理基于 LAMP 的 Web 开发的语言之一。LAMP 代表:
  • Linux
  • Apache
  • MySQL
  • 一种开放源码的 P-语言:Python、Perl 或 PHP。(如果不考虑基础的话,Ruby 是一种名义上的 P-语言。)
在 LAMP 中,通常您可以通过简单的操作系统脚本,使用诸如公共网关接口 (CGI) 之类的框架来提供 Web 应用程序。
eRuby 有效地提升了典型的基于 CGI 编程的水平。正如您所预料的那样,您可以直接将 ERb (或是基于 C 语言的 eruby 的等价物)插入 Apache HTTP 服务器并调用 Web 页面。随后您可以将 Ruby 视为 Java servlet 等价物了。但新的框架常将 ERb 作为一个 Ruby 库来调用。如果想要从 API 中创建一个 Ruby 模板,您应该使用清单 5 的修正版本,如清单 7 所示:
清单 7. 在 Ruby 应用程序中运行 ERb 模板
1
2
3
4
5
6
7
8
9
10
require 'erb'

template = ERB.new <<-EOF
<% 4.times do |i|%>
  <h1>This code is inside the loop.</h1>
  <p>This line is pass number <%= i %> through the loop.</p>
<% end %>
EOF

puts template.result




通过这种方式执行这些模板,您将 Ruby 编程语言下的所有能力赋予了您的模板。随后您可以在模板中的代码和应用程序其余部分的代码之间实现无缝重构。例如,您可以创建一个帮助器来基于散列映射的内容构建简单的表,如清单 8 所示:
清单 8. 创建帮助器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
require 'erb'

def table_helper(map)
  body = map.collect do |item|
    "<tr><td>#{item[0]}</td>
     <td>$#{item[1]}</td></tr>\n"
  end
  return("<table>\n#{body}</table>")
end  

map = {
       "Peaches" => "1.95",
       "Apples" => ".95"
      }

template = ERB.new <<-EOF
<p>Here's our price list</p>
<%= table_helper(map) %>

EOF

puts template.result




给定一个散列映射,清单 8 显示了一个用于创建表的帮助器。本例中先声明一个散列映射和一个模板,然后把它们放在一起使用(通常您可以将这个模板放到一个单独的文件中;而为了保持清单的简单,我将其写作一行)。注意,您会很自然地在 Ruby 编程语言的功能的基础上扩展模板系统的功能。本例将 ERb 方式的替换与提供简单字符串的基本 Ruby 字符串替换结合了起来。Ruby on Rails 用以下几种强制的方法将这些替换方式组合在一起:
  • Rails 的 partials 使小的子表单能够更好地被重用和组织。
  • Rails 的 layouts 使包含标题、菜单栏和版权信息在内的公共元素能够在所有页面中重用。
  • Rails 的 helpers,类似于清单 8 中的帮助器,使简化和重用视图结构变得简单。
事实上,Rails 的设计为用户贡献库提供了简单的方式,这些库使用 JavaScript 来呈现诸如 Ajax 元素、树控制或弹出式菜单之类的复杂特性。Rails 社区提供了功能远远强大于 Rails 基本功能的帮助器。
返回列表