`
water84222
  • 浏览: 369606 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论
阅读更多

一、关于:

 

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics