`
wiwolf
  • 浏览: 12399 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

ROR的AJAX心得

阅读更多

ROR的AJAX心得

最近用ROR做了一个网站(http://www.bladearena.com),全部采用了AJAX来处理数据。在这个
过程中积累了一些心得,在这里总结一下。一方面可以与大家分享,另外也让自己不要那么快忘记了:)

首先还是要赞一下ROR,感觉使用起来入行云流水一般,一发不可收拾。在编码的时候经常一上去就觉得
这个怎么简单,那个怎么那样容易。自己的想法往往一出现,就可以马上实现。似乎在一夜之间编程变成了
一件简单而愉快的事情。呵呵,感觉虽然有点夸张,但实际上也差不多就是。

说了那么多,还是来说说具体的一些心得体会吧。
1.关于页面刷新
    AJAX一个重要的用户体验就是页面不会刷新。所以在程序中如果要更新页面上的数据,就只能更新页面某一
部分,而要保持其它部分不动。要怎么实现呢?这就需要把页面分成很多的小块,具体到ROR上就是把页面分成
很多个.rhtml模板。根据我的经验,在一个功能中需要3样东西。一个ACTION,一个.rjs,一个.rhtml。
    (1)ACTION用来处理逻辑,分析提取数据,然后把需要的数据作为类变量(例如:@user)公开出来。
    (2).rjs用来处理页面表现方式。这里面一般用模板替换比较方便。
    (例如:page[:user].replace_html :partial=>'ui/user')
    (3).rhtml用来表现数据。把ACTION公开的数据用HTML方式表示出来。
    (例如:用户:<!---->)
    如上所述,在编程的时候就把很多小的功能通过以上方式一组一组的完成好,然后把它们全部一起镶嵌到
一个页面里,这样就可以很方便的实现了我们的整个系统。

2.关于数据传输的问题
    大家都知道AJAX也是通过HTTP传输数据的,所以数据量的大小也直接决定了页面反应的快慢。因此,在设计
页面的时候就应该尽可能小的划分各个区块,这样在更新数据的时候,只把需要更新的区块更新,不需要的千万不要
多加。

3.div+css
    这要提一下DIV+CSS,它的主要思想是把网页所要表现的内容和风格互相分离。这十分符合AJAX网页
的设计风格。把需要更新的模块分成不同的DIV,让后通过ID进行区分,这样就可以很方便的用我上面说的
方式来处理数据。

4.AJAX分页
    虽然ROR提供了分页,但很明显的是它不是AJAX的使用用的。所以这里就需要自己来做个,就我使用的方法来说。
分成2个部分,数据的显示和分页按钮。
    (1)数据显示就是一个.rhtml,在这里我设置了一个SESSION[:page]变量来存放页码,取数据的时候就通过
这个:page到数据库里面去取,然后把结果显示出来。这个模板很简单,就是一个MODEL的FIND,然后EACH出来就可以
了,其它根本不用管。
    (2)分页按钮对应一个ACTION,这个ACTION的主要作用就处理:page变量,比如增加一页就加1,跳转到第5页
就直接设置成5.然后就是对应这个ACTION的.rjs。这个.rjs其实也就很简单了,就是我上面所说的替换一下数据显示
模板就可以了。这样数据显示模板就会根据新的:page去查询新页面的数据。
    一个AJAX分页也就这样实现了。
   
(这篇文章由风北狼完成于2007-7-11)

分享到:
评论
4 楼 bencode 2007-07-14  
楼主做的吗? CSS布局好像不大好哦。 FF中看看新闻页面:)
3 楼 笨笨狗 2007-07-13  
我也是习惯了自己写js,所以rjs就用用常见、简单的得了,大部分还是自己控制比较好
2 楼 liusong1111 2007-07-13  
搜了一下,这个blog开头几个回复跟我意见差不多:
http://blog.zerosum.org/?q=node/47
另发现有人在rjs和REST使用上出了问题:
http://www.railsforum.com/viewtopic.php?pid=22592

我把前面几条引用过来了。

nap 写道

Like most people, I'd be happy to see the framework's impl of all things Javascript become a little less prototype-dependent. Making it pluggable to some extent so that alternative javascript libraries could be used (jquery, yahoo's YUI connection manager, etc) would be excellent. I guess that this may mean standardizing on a 'helper interface architecture' of some sort, some of which could be more RESTful in approach than others.


Justin Jones 写道

At the end of the day, I think it's pretty clear that "merging" Ruby/Rails and JavaScript/Prototype is not exactly a great idea.

It works awesome for simple remote form submits / remote links, but as you get more specific, it tends to break down.

Just take a look at the source of the "major" rails apps (the only ones I've looked at) - anything from 37s and Blinksale. Most of the JS do is written in JS, not in Ruby.

And this coming from someone (me) who isn't even particularly fluent in JS



Dan Kubb 写道

nap: You're right that alot of the Javascript the helpers output doesn't really fit in with the RESTful way of things. Many of those were in place over a year before RESTful Rails caught on.

RJS itself doesn't work too well with REST either. Justin's right on the money with his approach: In many cases it would be better to speak XML and have the JS parse it on the client side, rather than returning HTML/JS fragments. I'm hoping that Jester catches on and fill this gap.

I've actually found something neat about the Rails patching process in that nearly every single patch that's even remotely related to REST has been accepted extremely quickly. I've even had a couple of patches committed to the core within a few hours of submitting them because they added or fixed something related to REST or the HTTP handling.

I think if people can find a way of patching Rails' JS helpers to work better with REST that it'll be accepted quickly. Anything that isn't backwards compatible (like an AutoComplete that works with GET and XML) would fit nicely in a plugin for now.

1 楼 liusong1111 2007-07-12  
我认为需要重新审视RJS的作用。
如果ajax只是简单的做模板替换,用rjs还是客户端的纯javascript差别不大,都是那么一两行代码而已。
但如果控制复杂数据的更新,rjs代码里就既包含了数据,也包含了表现层的控制代码,后者依赖于调用页面上下文,隐约感到“脏”,是不是也有违REST原则?
RJS让使用者不需写javascript代码的优势毫无疑问,但同时:
1. 严重绑定prototype.js家族。虽然rails的一站式让我们无须选择,但就javascript库来说,jquery等后来者更优秀,虽然有plugin支持它,但毕竟不是官方。
2. rjs vs javascript 代码的重用性。我们写的通用javascript,可以封装成单独的js文件被重用到非rails系统中,但rjs显然不行。
3. 学习成本。省了javascript的学习成本,又带来了rjs的学习成本,又是一个典型的成本转移。rjs对于复杂javascript的支持度(它有调用javascript function的表达,但要求使用者对rjs和javascript都要了解)
4. 开头提到的 数据与表现分离原则。我个人更喜欢服务器端返回json,而把控制UI的代码用纯javascript写(这时可以选用喜欢的jquery等)。这样,被外部系统集成的障碍就小很多。比如让google gadget的XMLHttpRequest访问,只需在gadget中引用json.js进行正反向解析。


相关推荐

    RoR性能优化经验谈

    RoR(Ruby on Rails)是一种流行的开源Web开发框架,以其高效和简洁的代码著称。然而,随着网站规模的增长,性能优化成为必不可少的环节。在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在...

    RoR选题方向—源代码

    此外,标签中提到了其他Web开发技术,如AJAX(异步JavaScript和XML),它用于在不刷新整个页面的情况下更新部分内容,提升用户体验。ASP.NET、C#和J2EE/Java是RoR的主要竞争对手,它们各自有各自的优点和适用场景,...

    ror

    NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696

    ror中文资料

    **Ruby on Rails(简称RoR)中文资料** Ruby on Rails(RoR)是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。RoR强调“约定优于配置”...

    神经网络ror resenet模型

    **神经网络Ror ResNet模型详解** 在深度学习领域,ResNet(残差网络)模型是具有里程碑意义的创新,由He et al.在2015年提出。该模型解决了深度神经网络训练中的梯度消失问题,允许构建非常深的网络结构。而“Ror”...

    ROR安装必备所有架包

    在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...

    ror实例

    Ruby on Rails(简称RoR或Rails)是一种基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率并提供简洁、优雅的代码结构。"ror实例"可能指的是在学习或实践中,通过创建...

    初探ROR

    **初探ROR** Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进开发过程的简洁性和效率。Ruby on Rails的核心理念是“Don't Repeat ...

    RoRBlog 基于RoR的博客系统

    基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。

    delphi2007 for ajax

    - **ECO和RoR集成**:除了AJAX之外,还可以将ECO和Ruby on Rails等其他技术集成到Delphi2007 for AJAX中,以构建更加丰富的Web解决方案。 - **示例演示**:通过实际的示例演示来展示如何使用这些技术来构建完整的Web...

    Windows 上搭建 ROR环境

    ### Windows上搭建Ruby on Rails(ROR)环境详解 #### 一、引言 随着Web开发技术的不断发展,Ruby on Rails(简称Rails或ROR)作为一种高效、简洁且优雅的Web开发框架,受到了广大开发者的青睐。然而,在Windows...

    ROR绿色最新环境(2013/3/10)

    ROR环境 Ruby version 1.9.3 (java) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.12 JavaScript Runtime therubyrhino (Rhino) Active Record version 3.2.12 Action Pack version 3.2.12 ...

    Ajax on Rails

    本文将详细介绍Ajax在Ruby on Rails(简称ROR或RoR)框架中的应用。 #### Ajax简介 Ajax是一种用于创建快速且动态网页的应用程序方法。它可以在不重新加载整个页面的情况下,通过后台加载数据,并更新部分页面内容...

    ROR 文件的上传与下载

    ### ROR 文件的上传与下载:深入解析与实践 在Ruby on Rails(简称ROR)框架下,处理文件的上传与下载是一项常见的需求,尤其是在构建包含媒体内容的应用程序时。本文将基于给定的文件信息,详细阐述如何在Rails...

    freemis 基于ror框架的mis

    FreeMIS是一个基于Ruby on Rails(RoR)框架构建的管理信息系统(MIS)。RoR是由David Heinemeier Hansson开发的一个开源Web应用程序框架,它遵循“Don't Repeat Yourself”(DRY)原则,强调简洁和生产力。RoR使用...

    机遇ROR 的图书管理系统

    《机遇ROR的图书管理系统》是一份以Ruby on Rails(简称ROR)技术为核心,旨在构建高效、便捷的图书管理解决方案的学习资料。Ruby on Rails,是基于Ruby编程语言的开源Web应用框架,它遵循MVC(Model-View-...

    ROR环境配置

    在IT行业中,Ruby on Rails(简称ROR)是一款基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用开发过程,提高开发效率。本文将深入探讨如何配置ROR开发环境,以及...

    RoR 培训课程PPT

    ### RoR培训课程PPT知识点概述 #### 一、课程概览与背景介绍 - **课程性质**:本课程为为期五天的Ruby on Rails(简称RoR)入门级培训,适合初学者快速掌握RoR的基本概念和技术要点。 - **讲师信息**:由Peter ...

    javarebel 用JAVA和ROR一样方便测试

    破解版本的JAR包,放到本地磁盘,ECLIPUS直接用,到JVM设置直接加 -noverify -javaagent:D:\javarebel.jar

Global site tag (gtag.js) - Google Analytics