一、关于:
RJS 模板类似于 .rhtml 模板,除了它们包含 Javascript 命令并有一个 .rjs 扩展名。 Action/view 的命名方式依然是一样的。与通常用于渲染一个动作结果的常规模板不同的是,这些模板生成如何修改一个现有被渲染页面的指令。这让它可轻易地修改声明为 Ajax 应答页面上的多个元素。这些模板的动作在使用 Ajax 的后台调用并更新发起请求的页面。
当前支持的 RJS 方法 / 特征:
1 、 insert_html
2 、 replace_html
3 、 show
4 、 hide
5 、 visual_effect
6 、 alert
7 、 redirect_to
8 、 call
9 、 assign
10 、 <<
11 、 toggle
12 、 delay
二、安装:
当前两种方式可以在你的 Rails 应用程序内使用 RJS 模板。最简单的方式是更新你的 Rails 来使用 edge rails 。其次是把 RJS 模板安装为一个插件。
三、 Edge Rails( 边缘化的 Rails ) :
Edge Rails 的意思是你在本地运行 Rails 的最近 SVN ,而不使用的 Gem 。通常检查 /vendor 目录, Rails 将自动使用它而不是使用由 Gem 安装到你机器上的。
让你的 Rails 应用程序运行在 Edge rails 上的最简便途径是,使用下面命令来更新最近的 Edge rails 到你的应用程序的 vendor 目录内:
rake freeze_edge
rake update_javascripts
这会把整个 Rails 框架安置到你的应用程序内。这就允许你不用安装 Rails 就可跑应用程序。
与之相反的解冻操作是:
rake unfreeze_rails
有关 Edge Rails 的更多信息可参阅: http://wiki.rubyonrails.com/rails/pages/EdgeRails
四、插件:
按下面步骤安装 RJS 模板插件:
script/plugin discover
这将询问你是否想添加插件。提示时要添加 codyfauser.com 。这样可确保你有正确的东西可运行:
script/plugin sources
现在执行:
script/plugin install javascript_generator_templates
做为选择,如果你不想添加 codyfauser.com ,你可以直接安装插件:
script/plugin install
http://www.codyfauser.com/svn/projects/plugins/javascript_generator_templates/
五、例子:
清单:
1 、 SQL :
CREATE TABLE categories (
id serial NOT NULL,
name character varying(64)
);
2 、初始化安装:
rails rjs_demo
cd rjs_demo
rake freeze_edge
rake update_javascripts
script/generate controller home index add
script/generate model category
3 、视图模板 app/views/home/index.rhtml :
<%= form_remote_tag :url => { :action => 'add' } %>
Category: <%= text_field 'category', 'name' %>
<%= submit_tag 'Add' %>
<%= end_form_tag %>
<ul id="categories">
<% @categories.each do |category| -%>
<li><%= category.name %></li>
<% end -%>
</ul>
没有什么特殊东西,只是用分类清单和一个表单来添加更多的分类。注意 <ul> 标记的标识符是 'categories' 。如果它是一个 <table> 或 <tbody> 的标识符工作也是一样的。
4 、控制器方法 app/controllers/home_controller.rb :
class HomeController < ApplicationController
def index
@categories = Category.find( :all )
end
def add
@category = Category.new
if request.post?
@category = Category.create( params[:category] )
end
end
end
把添加的分类放到数据库并赋值它给要在模板中使用的实例变量 @category 。动作完成后它会查找名为 add.* 的模板,我们在这儿称它为 add.rjs 模板。
5 、 RJS 模板 app/views/home/add.rjs :
if @category && @category.errors.empty?
li = content_tag( 'li', @category.name )
page.insert_html :bottom, 'categories', li
page.visual_effect :highlight, 'categories', :duration => 3
end
如果创建的 category 没有错误,那么我们把它添加到 ‘categories’ 清单的底部。此处的魔术是 ‘page’ 对象。在 page 对象内,你可以在 html 文档的任意多个元素上工作。 Page 可以使用所有在上面列出的方法。
http://rewrite.rickbradley.com/articles/2006/02/06/rjs-templates
http://my4java.itpub.net/post/9983/215424