- 浏览: 162620 次
- 性别:
- 来自: 华东
文章分类
最新评论
-
chen_miao:
我是初学者,请问,我在flex设计好了带有按钮和下拉框的界面, ...
ruby+flex实现天气预报 -
barrytyh:
很多技术人员都有想法,但忘了一个根本性的问题,谁在给你MONE ...
互联网创业与软件开发 -
fireflyman:
囧......
关于并发和并行 -
fireflyman:
你老再次出现了
谈谈互联网新产品如何起步 -
qhh394141930:
写得很详细,受教了。谢谢!
从瀑布模型、极限编程到敏捷开发
简单来说,个性化主页就是结合了各种小模块和网络信息的个人主页。与传统网站的区别是:用户可以非常自由地控制其内容(通过RSS,email等等),内容会更适合用户口味并且使用查看也非常方便,由于有了ajax技术,所以更像是一个桌面软件。例如http://www.netvibes.com/就提供了比较酷的个性化主页服务。
总的来说主要有以下几个特点:
1 页面中的内容是一个个小模块,其内容来自于其他站点或者服务
2 用户可以根据自己的喜好通过拖拽随意摆放这些小模块
3 用户可以添加自己感兴趣的小模块
4 用户可以删除任意已添加的小模块
5 用户可以改变自己的页面风格以及布局。
用rails解决这些问题显得极为简洁,为了简化说明,这里不考虑用户权限,如下:
1 在主应用(也就是提供主页服务的系统)建立模块加载机制和代理转发功能(依据dlee翻译的《ajax模式与最佳实践》最后一章的MVC模式),在这里简化下就是一个user有N个page,一个page有N列,一列有N个模块。建立模型如下:
class User < ActiveRecord::Base has_many :pages end class Page < ActiveRecord::Base has_many :columns belongs_to :user end class Column < ActiveRecord::Base has_many :cells belongs_to :page end class Cell < ActiveRecord::Base belongs_to :column end
#在后台发起向其他系统调用服务,当然可以带有一些查询参数比如username已取得和该用户相关的模块内容。 def show @cell = Cell.find params[:id] Net::HTTP.start(@cell.url,@cell.port) do |http| response = http.get('#{@cell.path}', 'Accept' => 'text/xml') end render :text => @response.body end #其他系统处理请求并返回,返回结果可以是html/xml/rss/flash/js等等,这里暂用字符串文本代替。 def show render :text => "ok" end
其中需要说明的是:cells表中应存有name、来源URl、port、path,name表示改模块的名字,URl的作用是记录该cell的内容来自于哪个外部站点的rest服务,port指定外部站点的端口,path指定服务的路径。
2 利用rails内置的ajax功能处理拖拽,代码如下:
#为简明起见,取id为1的 page,当然也可以根据user来取page def index @page = Page.find 1 @columns = @page.columns end
<%= javascript_include_tag :defaults %>
<table id="table_<%= @page.id %>" align="center"> <tr id="tr_<%= @page.id %>"> <% for column in @page.columns %> <td id="td_<%= column.id %>" style="height:auto;word-break:break-all;vertical-align:top;"> <% for cell in column.cells %> <div id="cell_<%= cell.id %>" class="cell"> 正在载入…… </div> <% end %> </td> <% end %> </tr> </table> <% for column in @page.columns %> <%= sortable_element "td_#{column.id}", :url => { :action => "sort" , :column_id => column.id } , :dropOnEmpty => true , :tag => "div" , :containment => [ #一个页面最多可以支持4列,总之把page的所有column设置为拖拽容器即可。 "td_#{@page.columns[0].id}" , "td_#{@page.columns[1].id}" , "td_#{@page.columns[2].id}" , "td_#{@page.columns[3].id}" ] , :constraint => false %> <% end %> <% end %>
异步地为每个小模块加载内容
<script> window.onload = function(){ <% for column in @page.columns %> <% for cell in column.cells %> new Ajax.Updater('cell_<%= cell.id %>', '/Cell/show/<%= cell.id %>', {asynchronous:true,evalScripts:true,method:'get'}); <% end %> <% end %> } <script>
后台处理排序
def sort @column = Column.find params[:column_id] td_index = "td_" + @column.id.to_s list = params[td_index] list.each_with_index { |id,idx| cell = Cell.find id cell.column = @column cell.row_index = idx.to_i cell.save } end
3 向页面添加模块,这里默认向页面的第一列添加,添加模块的div可以做成弹出的浮动div形式。
<div> <% for cell in @cells %> <%= link_to_remote cell.name , :update => "td_#{@page.columns[0].id}" , :mothod => :get , :url => {:action => "add_cell" , :page_id => @page.id , :id => cell.id} ,:position => "top" %> <% end %> </div>
后台代码如下:
def add_Cell @page = Page.find params[:page_id] #获取该页面的第一列,column_index表示改列的列标 @column = Column.find :first , :conditions => ["page_id=? and column_index=?" , @page.id , 1] @cell = Cell.find params[:id] @cell.column = @column @cell.row_index = 0#row_index 表示该模块在一列中的位置 @cell.save end
4 删除模块
#在这里简单的删除该cell记录,前台直接隐藏该cell的div再向后台发送ajax请求。 def delete_cell Cell.delete params[:id] end
5 关于设置主题和列数,这个用ajax实现比较容易也比较常见,在此不做解释了。
6 这里仅提供了一个思路,很多地方可以完善和扩展,比如在现实中column和cell应为多对多的关系,这里简化为一对多,这个方案已经过简单的扩展和测试,效果还不错。
发表评论
-
创建你自己的rails generator
2010-01-27 15:01 1222在多个rails项目中,有时需要共享一些公用的componen ... -
rspec实践一(从零开始)
2009-12-25 12:52 1381关于利用rspec的文章感 ... -
javascript-image-cropper-ui with rails
2009-07-31 23:18 1502在rails上传头像的过程中,一般后端会采用rma ... -
简简单单在rails中做定时任务
2009-07-27 19:58 3393在平时的开发过程中,经常会遇到一些定时任务的需求 ... -
用restful_authentication和role_requirement搭建验证授权系统
2008-09-30 21:20 1563转自 http://fanix.iteye.com/blog/ ... -
Rails中html_escape和sanitize
2008-09-26 13:33 2561转自:http://blackanger.blog.51cto ... -
Rails简洁的模板系统Malline
2008-09-14 15:25 1410前段时间听说ra ... -
在rails中优雅的进行模型校验
2008-09-07 20:53 2193在用rails进行开发时,最常见的操作的是前台提交 ... -
win+apache+mongrel下部署ROR
2008-09-01 20:16 1141gem install mongrel #选择最 ... -
Ruby中使用Memecached
2008-09-01 20:03 1303sudo apt-get install memcached ... -
在rails中使用memcached
2008-09-01 20:00 1130libeven memcached的使用需要li ... -
在Ruby中设计Callback机制
2008-08-31 21:11 1944阅读Paperclip源码,发现里面有一个不错的callbac ... -
我怎么就觉得rails适合做大型应用
2008-08-25 13:24 3520之前读了不少 ... -
像操作ActiveRecord一样操作XML
2008-08-10 18:05 1272在开发RESTful应用或者实现多个应用系统交互时 ... -
ImageMagick/Rmagick 安装的那些事儿
2008-08-05 12:54 1174windows平台×××××××××××××××××××××× ... -
让google来为rails画图表
2008-07-26 17:05 1371去年年底的时候,所做的一个rails项目涉及到图表 ... -
10分钟给一个rails遗留系统添加标签功能
2008-07-19 10:18 994早些时候做过了一个rails系统,当时没有涉及到标签的功 ... -
让rails处理图片再简单一点
2008-07-14 18:25 3064先来看看rails处理图片的过程吧,用户上传图片, ... -
分享一款word风格的rails在线编辑器
2008-07-09 16:51 1509在线编辑器是web应用中最常见的东西了,关于它的作用 ... -
让rails处理图片再简单一点
2008-07-07 12:50 1113先来看看rails处理图片的过程吧,用户上传图片, ...
相关推荐
在“ruby on rails轻松使用”这个主题中,我们可以探讨以下几个关键知识点: 1. **安装Rails**: 首先,你需要确保已经安装了Ruby环境。然后,通过Ruby的包管理器gem来安装Rails。运行`gem install rails`命令即可...
8. **Helper方法**:为了保持视图的简洁,Rails允许在helper模块中定义辅助方法,这些方法可以在多个视图中复用,用于复杂的逻辑或格式化输出。 9. **Testing**:RoR提供全面的测试支持,包括Unit Tests、...
《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...
第九章“Personal profiles”讨论了如何为每个用户提供个性化的资料页面,展示其基本信息和个人动态。这部分内容不仅关注技术实现,还包括用户体验设计的最佳实践。 ##### 5.2 社区功能构建 第十章“Community”...
这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...
在掌握了以上知识点后,开发人员能够更加系统地了解如何利用Rails Engine来实现模块化的Rails应用,从而提高代码的复用性、可维护性和扩展性。通过拆分成组件,还能让团队分工更加清晰,提高开发效率,减少代码间的...
掌握Ruby语言是学习Ruby on Rails的前提条件,因为Rails正是建立在Ruby之上的。 #### 4. Rails Revealed(揭示Rails) 这部分内容会更进一步地探索Rails的内部机制,包括其架构、工作流程以及一些高级特性。例如,...
在这个"利用rails脚手架制作的简单网站"项目中,我们可以深入探讨Rails的核心概念和技术。 首先,让我们了解Rails的基本架构,它遵循MVC(Model-View-Controller)设计模式。模型(Model)处理业务逻辑和数据存储,...
Rails 2.0 API 文档是一个非常宝贵的资源,它为开发者提供了全面的指南,以便于在使用Ruby on Rails 2.0版本时更好地理解和利用其框架功能。Ruby on Rails(简称Rails)是一个开源的Web应用框架,它遵循MVC(模型-...
Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...
在开发过程中,了解和参考Rails API文档将极大地帮助你理解和利用这个强大的框架,以构建健壮、高效的API服务。同时,熟悉相关的Gem和工具,如 grape、rabl 或 jbuilder,可以帮助你进一步定制和扩展你的API功能。
标题中的“Ruby-get Schwifty”是一个工具或方法,它利用了Ruby on Rails框架中的两个关键组件:ActiveJob和ActionCable。在Rails应用中,ActiveJob是处理后台任务的抽象层,而ActionCable则是实现Websocket通信的库...
标题 "Rails" 指的是 Ruby on Rails,一个开源的Web应用程序框架,它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式。Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY...
在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...
### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...
Struts2和Rails都是流行的Web开发框架,它们都提供了强大的功能来支持应用程序的国际化,使得开发者可以轻松地为不同语言的用户提供本地化体验。这里我们将深入探讨这两个框架的国际化实现。 **Struts2的国际化实现...