jQuery Mobile开发移动Web应用代码分析:Rails设置篇

原创
移动开发
本文是使用jQuery Mobile和Rails开发一款问卷或调查应用程序的教程系列的第一个部分。该系列将介绍如何开发一款与移动设备兼容的Web应用程序,好让用户以一种类似向导的方式回答一系列问题。

[[34725]]

【51CTO译文】jQuery Mobile含有几项直接可以使用的实用特性,用于让我们开发的Web应用程序可以在众多移动设备上运行。在大多数情况下,jQuery Mobile随带的基本模板和CSS主题足以满足需要。然而,由于所有模板是用CSS来创建的,所以我们很容易定制我们网站的外观感觉。

[[34726]]

51CTO提供这个应用CSS原文件的下载地址,大家把应用下载下来对照应用进行分析

开发移动Web应用程序时,jQuery Mobile是一种理想的框架,这有诸多理由,包括如下:

1、由于该框架建立在jQuery上,因而对于在网上用过jQuery的人来说比较容易上手。

2、它目前与许多主要的平台兼容,包括iOS、Android、BlackBerry、Palm WebOS、诺基亚/Symbian和Windows Mobile等。

3、包含的库压缩后大小约为12k;就其提供的功能而言非常轻便。

至于后端,我们会使用随带几个gem的Rails 3,包括Typus。

先不妨创建一个新的rails应用程序:

  1. rails new . 

确保你已经安装了***版本的rails gem。如果你在开发的应用程序要求使用Rails 2,建议你了解和安装RVM(Ruby版本管理器)。这样可以避免可能由gem版本问题引起的许多头痛问题。

接下来,我们把gem添加到我们的Gemfile文件:

  1. source 'http://rubygems.org' 
  2.  
  3. gem 'rails', '3.0.7' 
  4.  
  5. gem 'sqlite3-ruby', :require => 'sqlite3' 
  6.  
  7. gem 'jquery-rails' 
  8.  
  9. # Admin 
  10.  
  11. gem 'typus', :git => 'http://github.com/fesplugas/typus.git' 
  12.  
  13. gem 'acts_as_list' 

正如你所见,我们将使用Rails 3.0.7,因为它是截至截稿时***的稳定版Rails。我们还将安装jquery-rails这个gem,覆盖Rails随带的默认的Prototype JavaScript库。由于jQueryMobile显然需要jQuery基本库,因而我们其实没有理由将包含的Prototype库留下来。

至于admin部分,我们会安装Typus gem和acts_as_list。只要稍加配置,Typus就会提供整个后端,用于管理我们为这次调查创建的问题。Acts as list可与Typus无缝地协同运行,让我们很容易控制问题的顺序。

现在我们可以运行捆绑工具(bundler),安装我们的gem。

  1. bundle install 

jQuery gem和Typus gem都有生成器,其作用是实际上让gem自行安装。在app目录下时,可通过运行下列命令来做到这一点:

  1. rails generate jquery:install 
  2.  
  3. rails generate typus 

默认情况下,Typus不随带任何一种认证门(authentication gate)。由于这几乎如同长驱直入数据库,我们的***步是应该确保其安全。确保安全的最简单方法就是,添加基本HTTP认证。这显然不是特别安全,但是就我们这个教程而言,已足够安全。为了实现这一步,我们需要往config/initializers/typus.rb文件添加下列几行:

  1. config.admin_title = "survey" 
  2.  
  3. config.authentication = :http_basic 
  4.  
  5. config.username = "admin" 
  6.  
  7. config.password = "pass" 

当用户访问/admin URL时,这会提示用户输入用户名和密码。

鉴于我们的应用程序已完全设置好,就可以开始生成资源和数据库模式。我们可以使用Rails的简略方法,即直接从命令行,使用下列命令来做到这一点:

  1. rails generate resource question question:string position:integer 
  2.  
  3. rails generate resource choice choice:string question_id:integer 
  4.  
  5. rails generate resource answer question_id:integer choice_id:integer 
  6.  
  7. rake db:migrate 

现在数据库中有3个表。一个表存放我们向用户提出的问题。每个问题会有多个选项,每个答案将是一条记录,存储了问题和选项的ID组合。由于选项只属于一个问题,答案表中的question_id字段其实没有必要。我们把它放在这里作为简易的访问器,用于简化查询,比如获取某个问题的答案数量。问题表中的position字段让我们可以指定问题在调查中出现的顺序。

为了给我们的模型添加这些关系,我们将按下列方法来进行改动:

  1. /app/models/question.rb 
  2.  
  3. class Question < ActiveRecord::Base 
  4.  
  5. acts_as_list 
  6.  
  7. has_many :choices 
  8.  
  9. end 

你从上面可以看到,我们给该模型添加了acts_as_list插件,那样我们就能改变每一个问题在调查中出现的顺序。

  1. /app/models/choice.rb 
  2.  
  3. class Choice < ActiveRecord::Base 
  4.  
  5. belongs_to :question 
  6.  
  7. end 
  8.  
  9. /app/models/answer.rb 
  10.  
  11. class Answer < ActiveRecord::Base 
  12.  
  13. belongs_to :question 
  14.  
  15. belongs_to :choice 
  16.  
  17. end 

好了!鉴于资源和数据库表已生成,我们需要为Typus创建存放在admin文件夹下的一些控制器。为此,我们运行下列命令:

  1. rails generate controller admin/answers 
  2.  
  3. rails generate controller admin/choices 
  4.  
  5. rails generate controller admin/questions 

接下来,我们需要更改每一个控制器文件里面的头几行,让控制器从ResourcesController继承过来,而不是从基本ApplicationController继承过来。在Typus中,一旦我们从ResourcesController继承过来,就直接获得了一些强大的CRUD(创建、读取、更新和删除)功能,没必要进一步编写任何代码。下面是必要的替换操作:

  1. /app/controllers/admin/answers_controller.rb 
  2.  
  3. replace: 
  4.  
  5. class Admin::AnswersController < ApplicationController 
  6.  
  7. with: 
  8.  
  9. class Admin::AnswersController < Admin::ResourcesController 
  10.  
  11. /app/controllers/admin/choices_controller.rb 
  12.  
  13. replace: 
  14.  
  15. class Admin::ChoicesController < ApplicationController 
  16.  
  17. with: 
  18.  
  19. class Admin::ChoicesController < Admin::ResourcesController 
  20.  
  21. /app/controllers/admin/questions_controller.rb 
  22.  
  23. replace: 
  24.  
  25. class Admin::QuestionsController < ApplicationController 
  26.  
  27. with: 
  28.  
  29. class Admin::QuestionsController < Admin::ResourcesController 

差不多完成了!现在我们要为Typus配置文件添加一些配置语句。要是config/typus目录下有其他任何yaml文件,我们可以删除,因为它们没有必要。我们运行生成器语句时,Typus可能会生成示例配置文件。我们不妨创建一个名为typus.yml的文件,位于config/typus目录下。

首先,我们添加Choice模型的配置语句:

  1. Choice: 
  2.  
  3. fields: 
  4.  
  5. default: choice, question_id, question 
  6.  
  7. form: choice, question_id, question 
  8.  
  9. order_by: 
  10.  
  11. relationships: question 
  12.  
  13. filters: created_at, question 
  14.  
  15. search: 
  16.  
  17. application: survey 
  18.  
  19. Question: 
  20.  
  21. fields: 
  22.  
  23. default: question, position 
  24.  
  25. form: question 
  26.  
  27. order_by: position 
  28.  
  29. relationships: choices 
  30.  
  31. filters: created_at 
  32.  
  33. search: question 
  34.  
  35. application: survey 

不妨逐一解释:

  1. Choice: 
  2.  
  3. fields: 
  4.  
  5. default: choice, question_id, question 
  6.  
  7. form: choice, question_id, question 

通过短短几行配置,Typus就能为我们创建许多后端功能。首先,我们将指定允许编辑的字段。Field(字段)定义的default(默认)部分将允许我们设定哪些字段会在列表中显示。在本例中,我们允许管理员可以在create和update表单中设定同样这组字段。这在字段定义的form(表单)部分进行了指定。

  1. order_by: 

默认情况下,我们的选项将按照创建选项的顺序来排序,所以根本不需要为order_by指定什么。

  1. relationships: question 

每个选项属于一个问题,所以我们可以定义问题与选项模型的关系。Typus会自动设计我们的表单,以说明数据记录彼此之间有着怎样的关系。

  1. filters: created_at, question 

只要在filter(过滤器)定义中列出字段及/或关系,就可以在typus中定义过滤器。根据字段类型,typus会在后端创建过滤器功能。以created_at为例,这将是指定日期的一组下拉框。至于question,这将是列出存储在数据库中所有问题的下拉框。

  1. search: 
  2.  
  3. application: survey 

就这个模型而言,search(搜索)定义对我们没什么用处,因为我们不可能搜索任何选项。不过我们要是在这里指定了字段, typus会提供一个搜索框,那样我们就能按照搜索词语,过滤存储在数据库中的记录。这里的application(应用程序)定义是应用程序的名称,我们称之为“survey”。

***一个清理步骤是,我们删除文件public/index.html,它会阻止我们的默认路由。

现在我们可以开启服务器了:

  1. rails s 

用浏览器访问下列URL,即可测试我们新创建的admin:

  1. http://localhost:3000/admin 

 

责任编辑:佚名 来源: 51CTO
相关推荐

2011-12-12 10:08:39

jQuery MobiHTML5

2011-07-08 15:27:03

jQuery Mobi

2011-09-05 10:49:14

Sencha ToucjQuery MobiHTML5

2011-09-05 13:45:25

jQuery MobiSencha Touc移动Web UI框架

2011-09-01 10:09:04

2013-11-28 09:38:04

移动开发jQuery Mobi

2012-03-27 14:34:07

Visual Stud微软MVC

2011-03-01 09:23:47

移动Web应用开发成本

2010-08-13 08:59:58

Rails

2011-07-21 15:37:40

jQuery MobiJQMJSON

2012-02-09 16:45:41

2012-03-06 16:57:40

jQuery mobijQuery mobiframework

2010-08-16 08:49:25

jQuery MobijQuery

2014-09-18 10:43:32

jquery mobi

2014-06-19 10:26:15

Mobile AppWeb App

2012-04-09 15:15:48

国双科技Mobile Diss

2016-04-25 10:07:18

jQuery代码Web开发效率

2012-03-06 15:41:16

jQuery MobijQuery Mobi手册

2012-01-18 14:29:42

移动Web应用开发

2011-02-21 09:10:42

WebHTML 5JavaScript
点赞
收藏

51CTO技术栈公众号