通过前面7篇文章的学习, 我们已经基本掌握了如何快速开发一个简单的博客应用程序, 本章作为入门的完结篇, 我们将要学习来为博客加上ujs, 让我们的博客加上一点ajax效果.
ujs全称Unobtrusive Javascript, 这也是Rails3的重要特性之一. Rails3的ujs利用了HTML5中
data-*@ 属性的巨大优势, 而摒弃了以前基于Prototype JS的构造器. (在rails1和rails2中,
我们使用ajax可能会利用 xxx.rjs 或者 xxx.js.builder, 在里面可以使用封装prototype的Page对象)
1. 让Rails3使用jQuery
轻量级js框架jquery相信大家一定不会陌生, 本教程中的ujs教程也是基于jquery来写的(当然你也可以使用prototype).
首先, 下载最新的jquery然后放入 public/javascripts 文件夹下面:
$ curl -L http://code.jquery.com/jquery-1.4.3.min.js > public/javascripts/jquery.js
同时我们也需要把原来的prototype ujs的rails.js 改成 jquery-ujs的rails.js:
$ curl -L http://github.com/rails/jquery-ujs/raw/master/src/rails.js > public/javascripts/rails.js
下载后可以看下javascripts文件夹, 里面有application, controls, dragdrop, effects,
jquery, prototype 以及 rails 等js文件, 出来jquery以外, 其他都是生产bolg应用时rails加进去的.
现在打开 config/application.rb 文件, 修改下面的配置:
JavaScript files you want as :defaults (application.js is always included).config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
上面的代码告诉rails, :default 符号的定义现在改成 jquery和rails啦, 启动我们的博客程序, 查看源代码中的<head>中的<script>是不是这3个js脚本.
2. 给评论加上ujs
当用户发表评论后, 浏览器往往会刷新页面, 那么使用ajax方式提交可以实现局部刷新, 从而避免数据交互开销以及增加客户体验.
现在我们修改 views/comments/_form.erb:
<%= form_for([@post, @post.comments.build], :remote=>true) do |f| %>
...
:remote=>true告诉rails, 该表单将使用xmlhttprequest方式提交数据.
接着, 我们修改 CommentsController下面的create动作:
还记得先前教程中的 respond_to 声明吗? 如果评论保存成功, rails将寻找相应的模板, 如果存在 create.html.erb 将渲染html, 如果存在 create.js.erb 当渲染js.
class CommentsController < ApplicationController
before_filter :authenticate, :only => :destroy
respond_to :html, :js, :xml
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
respond_with @comment if @comment.save
end
...
end
那么现在我们可以在 views/comments/下面创建 create.js.erb 模板了:
$('#comments').append("<%= escape_javascript(render @comment) %>"); // 插入 _comment 局部模板
$('#comment_body').val(""); // 清空表单
很熟悉? 是的, 完全就是jquery的写法, 只不过我们使用了一个 escape_javascript 来生成一段无<script>标记的代码.
现在, 我们需要修改下 Posts/ 下面的show.html.erb 模板:
<h2>Comments</h2>
<div id="comments">
<%= render @post.comments %>
</div>
好了, 现在试试吧.
3. 删除文章和评论
最后我们试着把 删除post以及评论 也加上ujs效果:
posts/index.html.erb:
<% @posts.each do |post| %>
<tr id='<%= "post_#{post.id}" %>'>
<td><%= post.name %></td>
<td><%= post.title %></td>
<td><%= post.content %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete, :remote => true %></td>
</tr>
<% end %>
PostsController#destroy:
def destroy
@post = Post.find(params[:id])
@post.destroy
respond_with(@post)
@post = Post.find(params[:id])
@post.destroy
respond_with(@post)
end
添加 views/posts/destroy.js.erb:
$('#post_<%= @post.id %>').hide(); //隐藏删除的记录.
最后的删除评论就留给大家吧 : )
所有的Rails3入门现在正式结束, 在后面的教程中, 我们将重点学习Rails3中的各个模块, 感谢大家收看!
转自: http://onia.iteye.com/blog/833268
相关推荐
脚本以用于 Rails 3.1+ 和 Rails 4 资产管道。 安装 将jquery_file_download-rails添加到应用程序的Gemfile : gem 'jquery_file_download-rails' 运行 Bundler 来锁定 gem: bundle install 在jquery和jquery...
jqgrid-jquery-rails 由Doc Walker认可提供为Rails 3.1+资产管道打包的jqGrid jQuery插件。安装将这些行添加到应用程序的Gemfile : # jqgrid jquery plugin packaged for the rails asset pipelinegem 'jqgrid-...
提供为 Rails 3.1+ 资产管道打包的qTip2 jQuery 插件。 安装 将这些行添加到应用程序的Gemfile : # qtip2 jquery plugin packaged for the rails asset pipeline gem 'qtip2-jquery-rails' , '~> 2.2.100' 然后...
为了解决这个问题,`rails-readable-xml` gem应运而生,它为Rails 3.1及更高版本的应用程序提供了一个jQuery插件,实现了XML数据的可读性增强。 `rails-readable-xml` gem的主要功能是将XML数据转换为用户友好的...
入门 Pre Rails 3.1: 添加到您的Gemfile中: gem 'jquery-rails'执行此命令以安装所需的js文件: rails generate jquery:install --ui 插入您的Gemfile中: gem 'jquery_datepicker'不要忘记安装CSS! Rails 3.1: ...
该gem打包了jQuery 插件,可轻松与Rails 3.1+资产pipleine一起使用。 Dynatable是根据AGPL许可的,但具有的可选,因此请确保您具有使用Dynatable的有效许可证。 Dynatable是一个使用jQuery,HTML5和JSON的有趣,...
该gem的目的是打包用于Summernote(Bootstrap上的Super Simple WYSIWYG编辑器)中用于Ruby on Rails版本== 3.1的资产。 summernote-rails的版本与原始summersum编辑器的版本匹配。 注意:从Rails 6+开始,webpack...
jquery_bbq_rails jquery_bbq_rails将Ben Almanin的jQuery BBQ库包装在rails引擎中,以便与Rails 3.1及更高版本提供的资产管道一起简单使用。 该宝石包括开发资源(非矿化资源),以方便勘探。 资产管道将在生产中...
此资源包含了书中所涉及的源代码,适用于对Rails 3.0、3.1、3.2版本的学习与实践。Rails作为一款强大的开源Web应用程序框架,以其MVC(模型-视图-控制器)架构模式,以及推崇的DRY(Don't Repeat Yourself)和...
该gem打包了jQuery 插件,可轻松与Rails 3.1+资产pipleine一起使用。 它提供了所有基本的DataTables文件以及一些其他功能。 重要的 当前的gem已发布,没有更新的插件。 jQuery DataTables重命名了参数名称,如果要...
铁轨这个 gem 只包含作为 Rails 3.1(或更高版本)资产管道中的资产。 gem 中的当前版本是 TipTip 1.3安装将 gem 添加到 Gemfile gem "tiptip-rails", "~> 1.0.0"用法在您的 JavaScript 清单中(例如application.js ...
flipclockjs-rails 这个gem打包用于Rails 3.1+资产管道的 。 FlipClock JS版本: 0.7.7 FlipClock.js需要jQuery 1.7.x+ 。安装将此行添加到您的应用程序的Gemfile中: gem 'flipclockjs-rails', '~> 0.7.7'然后执行...
脊柱铁轨轻松设置和使用带有Rails 3.1的 。Rails 3.1设置该gem需要使用 , 和提供的新的Rails资产管道。 这个gem做两件事: 将Spine添加到资产管道,因此您可以轻松地在应用程序中要求它: //= require spine 添加了...
该项目允许您在 Rails 3.1 应用程序中轻松使用 iPhone 样式的复选框。 安装 将gem 'ios-checkboxes'添加到 Gemfile 并运行bundle install 与 Rails 3.1 一起使用 将//=require ios-checkboxes添加到您的app/assets/...
使在Rails 3.1中包括jsTree的项目变得轻而易举。 安装 将以下行添加到您的Gemfile中: gem 'jstree-rails', :git => 'git://github.com/tristanm/jstree-rails.git' 然后运行bundle install并重新启动您的应用。 ...
安装这个宝石供应商为Rails 3.1及更高版本提供了jquery fancybox。 这些文件将被添加到资产管道中,可供您使用。 首先Gemfile添加到您的应用程序Gemfile : gem 'jquery-rails'gem 'fancybox-rails' 然后运行bundle ...
在 Rails 3.1+ 中使用 安装 将此行添加到应用程序的 Gemfile 中: gem 'jreject-rails' 然后执行: $ bundle 或者自己安装: $ gem install jreject-rails 现在您需要编辑您的 app/assets/javascripts/...
Rails:3.1及更高版本 此gem的主要版本和次要版本反映了iCheck it软件包的版本(当前iCheck 1.0.2由icheck-rails 1.0.2.0打包) 重要的 如果要从iCheck 0.9版升级,则jquery.icheck.js和zepto.icheck.js文件已删除...
3-6稳定的支撑导轨> = 4.2.x和Ruby> = 2.3.0 3-5-稳定的支撑导轨> = 4.2.x和Ruby> = 2.0.0 3-4-稳定的支撑轨> = 3.2.x和ruby> = 1.9.3 3-3-稳定的支撑轨> = 3.2.x和ruby> = 1.8 rails-3.2支持Rails 3.1和3.2,并且是...
要求轨道 3.1+ 主要的 JavaScript 库(JQuery、Prototype 等)必须包含在 selectivizr 包含标记之前。贡献这个 repo 应该没什么关系,但是如果你想改进代码或做一个版本提升,只需 fork 代码并提交拉取请求。 我尝试...