自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

jQuery Mobile開(kāi)發(fā)移動(dòng)Web應(yīng)用代碼分析:Rails設(shè)置篇

原創(chuàng)
移動(dòng)開(kāi)發(fā)
本文是使用jQuery Mobile和Rails開(kāi)發(fā)一款問(wèn)卷或調(diào)查應(yīng)用程序的教程系列的第一個(gè)部分。該系列將介紹如何開(kāi)發(fā)一款與移動(dòng)設(shè)備兼容的Web應(yīng)用程序,好讓用戶以一種類(lèi)似向?qū)У姆绞交卮鹨幌盗袉?wèn)題。

[[34725]]

【51CTO譯文】jQuery Mobile含有幾項(xiàng)直接可以使用的實(shí)用特性,用于讓我們開(kāi)發(fā)的Web應(yīng)用程序可以在眾多移動(dòng)設(shè)備上運(yùn)行。在大多數(shù)情況下,jQuery Mobile隨帶的基本模板和CSS主題足以滿足需要。然而,由于所有模板是用CSS來(lái)創(chuàng)建的,所以我們很容易定制我們網(wǎng)站的外觀感覺(jué)。

[[34726]]

51CTO提供這個(gè)應(yīng)用CSS原文件的下載地址,大家把應(yīng)用下載下來(lái)對(duì)照應(yīng)用進(jìn)行分析

開(kāi)發(fā)移動(dòng)Web應(yīng)用程序時(shí),jQuery Mobile是一種理想的框架,這有諸多理由,包括如下:

1、由于該框架建立在jQuery上,因而對(duì)于在網(wǎng)上用過(guò)jQuery的人來(lái)說(shuō)比較容易上手。

2、它目前與許多主要的平臺(tái)兼容,包括iOS、Android、BlackBerry、Palm WebOS、諾基亞/Symbian和Windows Mobile等。

3、包含的庫(kù)壓縮后大小約為12k;就其提供的功能而言非常輕便。

至于后端,我們會(huì)使用隨帶幾個(gè)gem的Rails 3,包括Typus。

先不妨創(chuàng)建一個(gè)新的rails應(yīng)用程序:

  1. rails new . 

確保你已經(jīng)安裝了***版本的rails gem。如果你在開(kāi)發(fā)的應(yīng)用程序要求使用Rails 2,建議你了解和安裝RVM(Ruby版本管理器)。這樣可以避免可能由gem版本問(wèn)題引起的許多頭痛問(wèn)題。

接下來(lái),我們把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' 

正如你所見(jiàn),我們將使用Rails 3.0.7,因?yàn)樗墙刂两馗鍟r(shí)***的穩(wěn)定版Rails。我們還將安裝jquery-rails這個(gè)gem,覆蓋Rails隨帶的默認(rèn)的Prototype JavaScript庫(kù)。由于jQueryMobile顯然需要jQuery基本庫(kù),因而我們其實(shí)沒(méi)有理由將包含的Prototype庫(kù)留下來(lái)。

至于admin部分,我們會(huì)安裝Typus gem和acts_as_list。只要稍加配置,Typus就會(huì)提供整個(gè)后端,用于管理我們?yōu)檫@次調(diào)查創(chuàng)建的問(wèn)題。Acts as list可與Typus無(wú)縫地協(xié)同運(yùn)行,讓我們很容易控制問(wèn)題的順序。

現(xiàn)在我們可以運(yùn)行捆綁工具(bundler),安裝我們的gem。

  1. bundle install 

jQuery gem和Typus gem都有生成器,其作用是實(shí)際上讓gem自行安裝。在app目錄下時(shí),可通過(guò)運(yùn)行下列命令來(lái)做到這一點(diǎn):

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

默認(rèn)情況下,Typus不隨帶任何一種認(rèn)證門(mén)(authentication gate)。由于這幾乎如同長(zhǎng)驅(qū)直入數(shù)據(jù)庫(kù),我們的***步是應(yīng)該確保其安全。確保安全的最簡(jiǎn)單方法就是,添加基本HTTP認(rèn)證。這顯然不是特別安全,但是就我們這個(gè)教程而言,已足夠安全。為了實(shí)現(xiàn)這一步,我們需要往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" 

當(dāng)用戶訪問(wèn)/admin URL時(shí),這會(huì)提示用戶輸入用戶名和密碼。

鑒于我們的應(yīng)用程序已完全設(shè)置好,就可以開(kāi)始生成資源和數(shù)據(jù)庫(kù)模式。我們可以使用Rails的簡(jiǎn)略方法,即直接從命令行,使用下列命令來(lái)做到這一點(diǎn):

  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 

現(xiàn)在數(shù)據(jù)庫(kù)中有3個(gè)表。一個(gè)表存放我們向用戶提出的問(wèn)題。每個(gè)問(wèn)題會(huì)有多個(gè)選項(xiàng),每個(gè)答案將是一條記錄,存儲(chǔ)了問(wèn)題和選項(xiàng)的ID組合。由于選項(xiàng)只屬于一個(gè)問(wèn)題,答案表中的question_id字段其實(shí)沒(méi)有必要。我們把它放在這里作為簡(jiǎn)易的訪問(wèn)器,用于簡(jiǎn)化查詢,比如獲取某個(gè)問(wèn)題的答案數(shù)量。問(wèn)題表中的position字段讓我們可以指定問(wèn)題在調(diào)查中出現(xiàn)的順序。

為了給我們的模型添加這些關(guān)系,我們將按下列方法來(lái)進(jìn)行改動(dòng):

  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插件,那樣我們就能改變每一個(gè)問(wèn)題在調(diào)查中出現(xiàn)的順序。

  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 

好了!鑒于資源和數(shù)據(jù)庫(kù)表已生成,我們需要為T(mén)ypus創(chuàng)建存放在admin文件夾下的一些控制器。為此,我們運(yùn)行下列命令:

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

接下來(lái),我們需要更改每一個(gè)控制器文件里面的頭幾行,讓控制器從ResourcesController繼承過(guò)來(lái),而不是從基本ApplicationController繼承過(guò)來(lái)。在Typus中,一旦我們從ResourcesController繼承過(guò)來(lái),就直接獲得了一些強(qiáng)大的CRUD(創(chuàng)建、讀取、更新和刪除)功能,沒(méi)必要進(jìn)一步編寫(xiě)任何代碼。下面是必要的替換操作:

  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 

差不多完成了!現(xiàn)在我們要為T(mén)ypus配置文件添加一些配置語(yǔ)句。要是config/typus目錄下有其他任何yaml文件,我們可以刪除,因?yàn)樗鼈儧](méi)有必要。我們運(yùn)行生成器語(yǔ)句時(shí),Typus可能會(huì)生成示例配置文件。我們不妨創(chuàng)建一個(gè)名為typus.yml的文件,位于config/typus目錄下。

首先,我們添加Choice模型的配置語(yǔ)句:

  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 

不妨逐一解釋?zhuān)?/p>

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

通過(guò)短短幾行配置,Typus就能為我們創(chuàng)建許多后端功能。首先,我們將指定允許編輯的字段。Field(字段)定義的default(默認(rèn))部分將允許我們?cè)O(shè)定哪些字段會(huì)在列表中顯示。在本例中,我們?cè)试S管理員可以在create和update表單中設(shè)定同樣這組字段。這在字段定義的form(表單)部分進(jìn)行了指定。

  1. order_by: 

默認(rèn)情況下,我們的選項(xiàng)將按照創(chuàng)建選項(xiàng)的順序來(lái)排序,所以根本不需要為order_by指定什么。

  1. relationships: question 

每個(gè)選項(xiàng)屬于一個(gè)問(wèn)題,所以我們可以定義問(wèn)題與選項(xiàng)模型的關(guān)系。Typus會(huì)自動(dòng)設(shè)計(jì)我們的表單,以說(shuō)明數(shù)據(jù)記錄彼此之間有著怎樣的關(guān)系。

  1. filters: created_at, question 

只要在filter(過(guò)濾器)定義中列出字段及/或關(guān)系,就可以在typus中定義過(guò)濾器。根據(jù)字段類(lèi)型,typus會(huì)在后端創(chuàng)建過(guò)濾器功能。以created_at為例,這將是指定日期的一組下拉框。至于question,這將是列出存儲(chǔ)在數(shù)據(jù)庫(kù)中所有問(wèn)題的下拉框。

  1. search: 
  2.  
  3. application: survey 

就這個(gè)模型而言,search(搜索)定義對(duì)我們沒(méi)什么用處,因?yàn)槲覀儾豢赡芩阉魅魏芜x項(xiàng)。不過(guò)我們要是在這里指定了字段, typus會(huì)提供一個(gè)搜索框,那樣我們就能按照搜索詞語(yǔ),過(guò)濾存儲(chǔ)在數(shù)據(jù)庫(kù)中的記錄。這里的application(應(yīng)用程序)定義是應(yīng)用程序的名稱(chēng),我們稱(chēng)之為“survey”。

***一個(gè)清理步驟是,我們刪除文件public/index.html,它會(huì)阻止我們的默認(rèn)路由。

現(xiàn)在我們可以開(kāi)啟服務(wù)器了:

  1. rails s 

用瀏覽器訪問(wèn)下列URL,即可測(cè)試我們新創(chuàng)建的admin:

  1. http://localhost:3000/admin 

 

責(zé)任編輯:佚名 來(lái)源: 51CTO
相關(guān)推薦

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移動(dòng)Web UI框架

2011-09-01 10:09:04

2011-03-01 09:23:47

移動(dòng)Web應(yīng)用開(kāi)發(fā)成本

2013-11-28 09:38:04

移動(dòng)開(kāi)發(fā)jQuery Mobi

2012-03-27 14:34:07

Visual Stud微軟MVC

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

2014-09-18 10:43:32

jquery mobi

2010-08-16 08:49:25

jQuery MobijQuery

2014-06-19 10:26:15

Mobile AppWeb App

2012-04-09 15:15:48

國(guó)雙科技Mobile Diss

2016-04-25 10:07:18

jQuery代碼Web開(kāi)發(fā)效率

2012-03-06 15:41:16

jQuery MobijQuery Mobi手冊(cè)

2012-10-09 09:28:48

jQuery Mobi餐廳訂餐應(yīng)用

2011-09-02 16:42:51

Sencha ToucWeb應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)