- 浏览: 30219 次
- 性别:
- 来自: 苏州
最新评论
Agile Web Development with Rails 3nd Edition学习笔记-创建一个基于Ajax的购物车
- 博客分类:
- Ruby and Rails
上篇笔记中,我们通过partial把购物车信息放到了index页面的Sidebar上。当我们点击“Add to Cart”按钮时,Sidebar上的商品和数目会改变。但是,我们同时会发现,刷新了的不仅仅是购物车信息,整个页面都刷新了。如果你的浏览器中显示的本来就是页面的最顶端,就不会有什么感觉。但是如果你选择的产品是在你浏览到了页面的中间或者更下面,当你点击了“Add to Cart”之后,页面又会回到最顶端。以至于你必须再去寻找你刚才看到了哪里。这样往复的动作,直到你感到很崩溃。
那么,我们这节来改善一下用户体验。让用户点击了“Add to Cart”之后,只是刷新购物车信息部分的内容,而不会刷新整个页面。
要做到这件事,就需要使用一些Ajax的技术了。幸运的是,Rails提供了很强的功能来帮助我们生成页面的JavaScript代码,节省了我们的时间,同时也让我们能够把更多的精力放在功能的开发上,而不是代码细节。
首先,我们要在layout中添加一些代码来引入一些必要的JavaScript定义。在depot/app/views/layouts/store.html.erb文件中导入CSS样式表的后面,添加下面的代码:
通过查看实际生成的页面代码,我们可以看到这行代码实际为页面添加了如下5个JavaScript库文件:
接下来,我们要修改“Add to Cart”按钮的实现,把原先的POST请求变成一个Ajax的请求。我们要做的就是使用下面的代码来替换depot/app/views/store/index.html.erb文件中原先的button_to代码。
通过查看实际生成的页面代码,我们可以看到,原先的一个submit动作变成了如下的Ajax请求:
然后,我们要修改一下add_to_cart方法来响应我们的Ajax请求。我们要做的就是把上节在这个方法中添加的redirect_to_index的调用使用下面的代码替换掉。
这样修改之后,当add_to_cart方法处理完Ajax的请求后,Rails将会寻找该方法的template来送给页面。之前我们使用的是add_to_cart.html.erb作为该方法的template的。其实Rails还支持以“.js.rjs”结尾的template。这种template中实际是定义要在浏览器端使用的JavaScript代码的。
那么,我们现在就定义一个新的add_to_cart.js.rjs文件来作为这个方法的template。
这段代码的作用实际上是新的数据结果替换掉index页面中id为“cart”的div部分。也就是我们显示购物车信息的地方。最终,浏览器端页面上关于购物车信息的代码将被新的所替代,这样实际上就刷新了那个小区域。
好了,我们可以在浏览器上欣赏一下Ajax给我们带来的良好体验了。
如果按照上面的步骤,你的页面没有表现出Ajax给我们带来的良好体验。下面是书中给的一些提示,也许有助于解决你的问题:
1、你是否删除了原来的add_to_cart.html.erb文件?(应该删除)
2、第一步中提到的javascript_include_tag你是否添加了?(它会为你添加Ajax需要的JavaScript库)
3、你的浏览器有没有什么特殊的设置之类的东西强制刷新页面上的所有东西?有是浏览器在本地保存的页面缓冲也会有影响。这时候最好强制刷现一下你的页面。
4、有没有什么错误信息被添加到了development.log文件中?
5、有没有在development.log中看到你的程序接收到了来自浏览器的add_to_cart请求?如果没有,那意味着页面没有生成Ajax请求。如果JavaScript的库确实被加载了,那么,可能你的浏览器禁用了JavaScript。
6、有人报告说他们必须停掉他们的服务,重新启动服务才能使得我们的修改生效。如果前面的方法没有解决你的问题,也许你也需要重新启动一下服务。
7、如果你使用的浏览器是IE,也许它正运行在"quirks"模式,请把它重新设置到“Standard”模式。
那么,我们这节来改善一下用户体验。让用户点击了“Add to Cart”之后,只是刷新购物车信息部分的内容,而不会刷新整个页面。
要做到这件事,就需要使用一些Ajax的技术了。幸运的是,Rails提供了很强的功能来帮助我们生成页面的JavaScript代码,节省了我们的时间,同时也让我们能够把更多的精力放在功能的开发上,而不是代码细节。
首先,我们要在layout中添加一些代码来引入一些必要的JavaScript定义。在depot/app/views/layouts/store.html.erb文件中导入CSS样式表的后面,添加下面的代码:
<%= javascript_include_tag :defaults %>
通过查看实际生成的页面代码,我们可以看到这行代码实际为页面添加了如下5个JavaScript库文件:
<script src="/javascripts/prototype.js?1272207119" type="text/javascript"></script> <script src="/javascripts/effects.js?1272207119" type="text/javascript"></script> <script src="/javascripts/dragdrop.js?1272207119" type="text/javascript"></script> <script src="/javascripts/controls.js?1272207119" type="text/javascript"></script> <script src="/javascripts/application.js?1271501647" type="text/javascript"></script>
接下来,我们要修改“Add to Cart”按钮的实现,把原先的POST请求变成一个Ajax的请求。我们要做的就是使用下面的代码来替换depot/app/views/store/index.html.erb文件中原先的button_to代码。
<% form_remote_tag :url => { :action => 'add_to_cart', :id => product } do %> <%= submit_tag "Add to Cart" %> <% end %>
通过查看实际生成的页面代码,我们可以看到,原先的一个submit动作变成了如下的Ajax请求:
new Ajax.Request('/store/add_to_cart/2', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;
然后,我们要修改一下add_to_cart方法来响应我们的Ajax请求。我们要做的就是把上节在这个方法中添加的redirect_to_index的调用使用下面的代码替换掉。
respond_to do |format| format.js end
这样修改之后,当add_to_cart方法处理完Ajax的请求后,Rails将会寻找该方法的template来送给页面。之前我们使用的是add_to_cart.html.erb作为该方法的template的。其实Rails还支持以“.js.rjs”结尾的template。这种template中实际是定义要在浏览器端使用的JavaScript代码的。
那么,我们现在就定义一个新的add_to_cart.js.rjs文件来作为这个方法的template。
page.replace_html("cart" , :partial => "cart" , :object => @cart)
这段代码的作用实际上是新的数据结果替换掉index页面中id为“cart”的div部分。也就是我们显示购物车信息的地方。最终,浏览器端页面上关于购物车信息的代码将被新的所替代,这样实际上就刷新了那个小区域。
好了,我们可以在浏览器上欣赏一下Ajax给我们带来的良好体验了。
如果按照上面的步骤,你的页面没有表现出Ajax给我们带来的良好体验。下面是书中给的一些提示,也许有助于解决你的问题:
1、你是否删除了原来的add_to_cart.html.erb文件?(应该删除)
2、第一步中提到的javascript_include_tag你是否添加了?(它会为你添加Ajax需要的JavaScript库)
3、你的浏览器有没有什么特殊的设置之类的东西强制刷新页面上的所有东西?有是浏览器在本地保存的页面缓冲也会有影响。这时候最好强制刷现一下你的页面。
4、有没有什么错误信息被添加到了development.log文件中?
5、有没有在development.log中看到你的程序接收到了来自浏览器的add_to_cart请求?如果没有,那意味着页面没有生成Ajax请求。如果JavaScript的库确实被加载了,那么,可能你的浏览器禁用了JavaScript。
6、有人报告说他们必须停掉他们的服务,重新启动服务才能使得我们的修改生效。如果前面的方法没有解决你的问题,也许你也需要重新启动一下服务。
7、如果你使用的浏览器是IE,也许它正运行在"quirks"模式,请把它重新设置到“Standard”模式。
发表评论
-
Agile Web Development with Rails 3nd Edition学习笔记-隐藏空的购物车
2010-04-29 23:19 1038到现在位置,我们已经完成了产品列表和购物车功能。虽然看起来已经 ... -
Agile Web Development with Rails 3nd Edition学习笔记-高亮显示改变
2010-04-28 22:24 871当客户点击了“Add to Cart“按钮之后,购物车的数据改 ... -
Agile Web Development with Rails 3nd Edition学习笔记-使用Ajax将购物车放入Sidebar
2010-04-27 00:38 1059之前,当用户点击了“Add to Cart“按钮之后,页面会跳 ... -
Agile Web Development with Rails 3nd Edition学习笔记-完成购物车
2010-04-26 22:41 856这一篇,我们来完成我们的购物车的制作吧。 首先,为了客户能够很 ... -
Agile Web Development with Rails 3nd Edition学习笔记-错误处理
2010-04-26 22:07 845这一部分其实东西很少,这里不做过多的描述,仅仅是记录下来,以便 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建更智能的购物车
2010-04-25 17:05 811上篇笔记我们已经让我们的网站能够保存客户选购的产品了,但是,似 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建购物车
2010-04-23 22:06 890上篇笔记中,我们为保 ... -
Agile Web Development with Rails 3nd Edition学习笔记-把Sessions放进数据库
2010-04-21 22:21 1019depot在线商店需要一个能保存用户选购的各种各样的商品的地方 ... -
Agile Web Development with Rails 3nd Edition学习笔记-格式化价格和添加购物按钮
2010-04-19 22:42 1039这篇只有很少的一点内 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建页面布局模板
2010-04-19 01:32 1009典型的网站一般都具有 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建产品目录列表
2010-04-18 19:48 790按照书上的引导,我们 ... -
Agile Web Development with Rails 3nd Edition学习笔记-美化我们的程序
2010-04-18 18:37 1029我们的程序现在显示出来的画面还是那么的原始和难看,接下来我们要 ... -
Agile Web Development with Rails 3nd Edition学习笔记-为数据增加校验处理
2010-04-18 00:23 978数据的校验是在model ... -
Agile Web Development with Rails 3nd Edition学习笔记-向数据库表追加字段
2010-04-18 00:07 927我们可以使用migration工具在存在的数据库表中追加字 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建Depot工程
2010-04-17 21:21 919开始学习ROR了,由于在开始跟着书做这个Depot工程 ...
相关推荐
Agile Web Development with Rails, 2nd Edition <br>有两份PDF文件,大小分别是7.39MB和6.55MB <br>作者: Dave Thomas , David Heinemeier Hansson , Leon Breedt , Mike Clark , James Duncan Davidson ,...
### 敏捷Web开发与Rails 3:关键知识点解析 #### 一、Rails版本与兼容性 本书《敏捷Web开发与Rails》第三版是基于Rails 2编写的。截至本书印刷时,当前可用的Rails Gem版本为2.1。书中所包含的所有代码均已在该...
文件列表中的《Agile Web Development with Rails 3nd Edition Beta.pdf》很可能是这本书的电子版,读者可以通过阅读此PDF文件获取完整的学习资料,包括详细的章节讲解、示例代码和练习题,以便在实践中不断巩固和...
Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式,以“约定优于配置”(Convention over Configuration)的原则,大大简化了Web应用的开发流程。...
Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details., Tens of thousands of ...
总之,"depot"压缩包为学习者提供了一个宝贵的实践平台,通过实际操作,学习者可以更好地理解《Agile Web Development with Rails-Second Edition-Beta》中介绍的理论和技巧,从而提升自己的Rails开发技能。
Rails敏捷开发第三版,很不错的rails入门书,对初学rails的人很有用
《敏捷Web开发与Rails》第四版是一本专为软件开发者设计的权威指南,全面涵盖了使用Ruby on Rails框架进行敏捷Web应用开发的知识。Rails 3是该版本的重点,它引入了许多新特性和改进,使得开发过程更为高效且灵活。...
书中的"Pragmatic.Bookshelf.Agile.Web.Development.with.Rails.2nd.Edition.Dec.2006.eBook-BBL"可能是该书籍的电子版文件,它包含了全书的章节和内容。读者可以通过这个电子版深入学习Rails开发的各种技巧和最佳...
Rails是一个强大的、基于模型-视图-控制器(MVC)架构模式的开源Web应用框架,它以Ruby编程语言为基础,强调简洁和生产力。在第四版中,作者们详细介绍了Rails 4的新特性和改进,包括ActiveRecord的更新、Action...
Agile Web Development with Rails 1-14节_ppt(老师发的修正版)
1. **Agile Development**: 敏捷开发是一种强调快速响应变化、迭代式开发和团队协作的软件开发方法。它鼓励通过短期的迭代周期和持续集成来提高软件的质量和可维护性。书中提到的敏捷方法在Rails项目中体现为频繁的...
Agile Web Development with Rails, Third Edition by Sam Ruby, Dave Thomas, David Heinemeier Hansson Rails just keeps on changing. Rails 2, released in 2008, brings hundreds of improvements, including...
《敏捷Web开发与Rails》是一本深度探讨如何利用Ruby on Rails框架进行敏捷Web开发的指导书籍,由Dave Thomas、David Heinemeier Hansson等多位在Rails社区有着深厚贡献的作者共同编写。本书不仅覆盖了Rails的基本...