清单 1. Todo_controller.rb
清单 1 中的代码使用了两个方法。list() 方法用于显示页面。add() 方法用于在列表中添加新的项目,然后再在 HTML 中返回列表。class TodoController < ApplicationController def list @tasks = Todo.find(:all) end def add task = Todo.new task.name = params[:task][:name] task.save @tasks = Todo.find(:all) end end
list() 方法的 RHTML 如 清单 2所示。
清单 2. List.rhtml
这个页面使用 form_remote_tag 把简单表单的内容提交到控制器中的 add() 方法。add() 方法把 to-do 项添加到表中,然后为得到的 <div> 标记返回新的内容。这一功能的代码如 清单 3所示。<html> <head> <%= javascript_include_tag :defaults %> </head> <body> <div id="results"> <% @tasks.each { |t| %> <%= t.name %><br/> <% } %> </div> <%= form_remote_tag :url => { :action => 'add' }, :update => 'results' %> <%= text_field :task, :name %> <%= submit_tag 'Add' %> <%= end_form_tag %> </body> </html>
清单 3. Add.rhtml
那么,我可以从 TaDaLists 中学到些什么呢? 第一,少许 Ajax 应用程序会花大力气使 Web 应用程序感觉更像是桌面应用程序。第二,选择使用 Web 框架 —— 特别是那些包含 Ajax 的框架 —— 可以使这种类型的工作相当简单。<% @tasks.each { |t| %> <%= t.name %><br/> <% } %>