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

Sencha Touch 2.0官方指南:如何使用"類"

移動(dòng)開發(fā)
Sencha Touch 2.0采用跟Ext JavaScript 4一樣的類系統(tǒng)。這使得我們可以很輕松地在JavaScript中創(chuàng)建或繼承新的類。類系統(tǒng)提供了繼承,依賴加載,mixin,強(qiáng)大的配置選項(xiàng)等內(nèi)容。

簡(jiǎn)單來(lái)說(shuō),類是一個(gè)擁有一些屬性和方法的對(duì)象。例如:定義一個(gè)動(dòng)物類,定義其名稱和功能,使得它能說(shuō)話,我們只需這樣做:

  1. Ext.define('Animal', { 
  2. config: { 
  3. name: null 
  4. }, 
  5. speak: function() { 
  6. alert('grunt'); 
  7. }); 

這樣我們就定義了一個(gè)動(dòng)物類,每個(gè)動(dòng)物可以有一個(gè)名稱,并可以說(shuō)話。要?jiǎng)?chuàng)建一個(gè)新的的動(dòng)物,我們只需這樣:

  1. var bob = Ext.create('Animal', { 
  2. name: 'Bob' 
  3. }); 
  4. bob.speak(); //alerts 'grunt'  

在這里,我們創(chuàng)建了一個(gè)名為Bob的動(dòng)物,并命令它說(shuō)話?,F(xiàn)在,我們已經(jīng)定義了一個(gè)類和并創(chuàng)建了一個(gè)實(shí)例,但我們不知道鮑勃是什么物種,所以讓我們定義一個(gè)人類的作為動(dòng)物類的子類:

  1. Ext.define('Human', { 
  2. extend: 'Animal', 
  3.  
  4. speak: function() { 
  5. alert(this.getName()); 
  6. }); 

現(xiàn)在我們已經(jīng)從動(dòng)物類繼承了一個(gè)新的的人類,因此人類獲得其所有的方法和配置。實(shí)際上,我們重寫了說(shuō)話的方法,因?yàn)榇蠖鄶?shù)人有足夠的智慧,說(shuō)他們的名字,而不是咕嚕咕嚕地叫?,F(xiàn)在,我們創(chuàng)建一個(gè)名為Bob的人,并讓他說(shuō)話:

  1. var bob = Ext.create('Human', { 
  2. name: 'Bob' 
  3. }); 
  4.  
  5. bob.speak(); //alerts 'Bob' 

你應(yīng)該也注意到了上面的代碼中使用了getName方法,然而我們并沒有定義動(dòng)物類的getName方法。那它來(lái)自哪里?答案是:框架自動(dòng)幫每一個(gè)配置項(xiàng)添加了以下方法:

一個(gè)getter方法 - 如getName就是返回name的當(dāng)前值。

一個(gè)setter方法 - 如getName就是為name設(shè)置一個(gè)新值。

an applier function - applyName() in this case - which is called by the setter and lets you run a function when a configuration changes

getter和setter都是自動(dòng)生成的,建議大家使用它們來(lái)存取類里面的數(shù)據(jù)。ST的每一個(gè)組件都使用了getter和setter的模式,這意味著如果我們知道一個(gè)配置項(xiàng),也就知道如何獲取和設(shè)置它的值了。

這也讓你的的代碼更整潔。舉個(gè)例子:如果你想在改變Bob的名字時(shí)詢問(wèn)用戶。就可以定義applyName方法,它會(huì)被自動(dòng)調(diào)用:

  1. Ext.define('Human', { 
  2. extend: 'Animal', 
  3.  
  4. applyName: function(newName, oldName) { 
  5. return confirm('Are you sure you want to change name to ' + newName + '?'); 
  6. }); 

我們用瀏覽器內(nèi)建的confirm方法彈出了一個(gè)確認(rèn)操作的對(duì)話框。如果applier方法返回的是false,那name的值將不會(huì)發(fā)生改變。

  1. var bob = Ext.create('Person', { 
  2. name: 'Bob' 
  3. }); 
  4.  
  5. bob.setName('Fred'); //opens a confirm box, but we click No 
  6.  
  7. bob.speak(); //still alerts 'Bob' 

我們已經(jīng)學(xué)習(xí)了類系統(tǒng)的這些內(nèi)容:

用Ext.define來(lái)定義新的類。

用Ext.create來(lái)創(chuàng)建對(duì)象實(shí)例。例如:Ext.create('SomeClass', {some: 'configuration'})

用"extend"來(lái)繼承擴(kuò)展類。

使用系統(tǒng)自動(dòng)生成的getter和setter方法,這會(huì)讓代碼更整潔。

現(xiàn)在,你已經(jīng)學(xué)會(huì)如何定義和使用一個(gè)類。但類系統(tǒng)的內(nèi)容遠(yuǎn)遠(yuǎn)不只這些。

依賴與動(dòng)態(tài)加載

大多數(shù)時(shí)候,類之間都存在著依賴。我們可以使用"requires"關(guān)鍵字來(lái)引入一個(gè)被依賴的類。人類依賴動(dòng)物類并擴(kuò)展動(dòng)物類,這種情況下并不需要特殊的說(shuō)明,用"extend"就已經(jīng)表明了這種依賴關(guān)系。

  1. Ext.define('Human', { 
  2. extend: 'Animal', 
  3.  
  4. requires: 'Ext.MessageBox', 
  5.  
  6. speak: function() { 
  7. Ext.Msg.alert() 
  8. }); 

當(dāng)你像這樣定義一個(gè)類的時(shí)候,ST就會(huì)檢查并異步加載Ext.MessageBox。

Ext.MessageBox也可能依賴于其他類,這些類也將在后臺(tái)自動(dòng)加載。Ext.MessageBox和動(dòng)物類都加載完畢后,就會(huì)定義人類。然后就可以使用Ext.create實(shí)例化"人"了。

在開發(fā)過(guò)程中,多文件可以讓我們有效地管理代碼,但應(yīng)用發(fā)布后,應(yīng)該盡量減少文件的數(shù)目以提高網(wǎng)絡(luò)響應(yīng)速度。ST2的JSBuilder工具可以分析你的應(yīng)用程序,并將你所有代碼連同你所用到的ST中的類合并成一個(gè)js文件。關(guān)于JSBuilder使用方法的介紹,請(qǐng)看指南的第二部分。

每種方法都有其自身的利弊,我們是否能夠取其精華,去其糟粕?答案是肯定的,在ST2里,我們已經(jīng)實(shí)現(xiàn)了這一目標(biāo)。

命名約定

使用統(tǒng)一的風(fēng)格來(lái)命名類、名空間和文件名有助于更好地組織代碼,保證代碼的條理性和可讀性。

1) 類

類名只能由字符和數(shù)字組成。不要在類名中出現(xiàn)數(shù)字,除非它屬于一個(gè)技術(shù)術(shù)語(yǔ)。不要使用下劃線,連字符,以及任何字母數(shù)字以外的字符。例如:

MyCompany.useful_util.Debug_Toolbar 不要這樣寫

MyCompany.util.Base64 這個(gè)OK

每個(gè)類都要有命名空間。用"."來(lái)為類分配命名空間,把類分配到不同的包內(nèi)。例如:

MyCompany.data.CoolProxy

MyCompany.Application

***的命名空間和類名使用駱駝拼寫法,其他的都用小寫。例如:

MyCompany.form.action.AutoLoad

非框架本身的類,不要使用Ext作為***命名空間。

首字母縮略詞也應(yīng)該遵循上面列出的駱駝拼寫法約定。例如:

使用 Ext.data.JsonProxy 而不用 Ext.data.JSONProxy

使用 MyCompany.util.HtmlParser 而不用 MyCompary.parser.HTMLParser

使用 MyCompany.server.Http 而不用 MyCompany.server.HTTP

2) 源文件

類名直接映射到類文件的存儲(chǔ)路徑。因此,每個(gè)文件對(duì)應(yīng)一個(gè)類(就像java一樣)例如:

Ext.util.Observable 存儲(chǔ)位置為 path/to/src/Ext/util/Observable.js

Ext.form.action.Submit 存儲(chǔ)位置為 path/to/src/Ext/form/action/Submit.js

MyCompany.chart.axis.Numeric 存儲(chǔ)位置為 path/to/src/MyCompany/chart/axis/Numeric.js

其中 path/to/src 是你存儲(chǔ)腳本的目錄(譯者注:這里不是真的"path/to"而是你的app目錄),所有的類都應(yīng)該保存在這個(gè)目錄下,并被正確地劃分命名空間。這樣Ext .require()方法才能正確地動(dòng)態(tài)載入腳本文件。這樣對(duì)將來(lái)的維護(hù)和部署工作都也很會(huì)有幫助。

3) 變量和方法

跟類名一樣, 變量名和方法名只能由字符和數(shù)字組成。不要在類名中出現(xiàn)數(shù)字,除非它屬于一個(gè)技術(shù)術(shù)語(yǔ)。不要使用下劃線,連字符,以及任何字母數(shù)字以外的字符。

變量名和方法名應(yīng)該使用首字母小寫的駱駝拼寫法。示例:

好的方法名: getHtml() getJsonResponse() parseXmlContent()

不好的方法名:getHTML() getJSONResponse() parseXMLContent()

好的變量名:isGoodName base64Encoder xmlReader httpServer

4) 屬性

除靜態(tài)屬性以外的類的屬性,其命名方式跟方法和變量的一樣。

靜態(tài)屬性全部用大寫命名,例如:

Ext.MessageBox.YES = "Yes"

Ext.MessageBox.NO = "No"

MyCompany.alien.Math.PI = "4.13"

責(zé)任編輯:佚名 來(lái)源: 移動(dòng)Web開發(fā)社區(qū)
相關(guān)推薦

2011-10-26 10:21:40

Sencha Touc組件

2011-10-26 10:32:05

Sencha Touc數(shù)據(jù)視圖

2012-01-10 13:21:33

Sencha Touc使用data包

2011-10-18 09:49:40

新特征Sencha Touc

2011-09-02 15:18:49

Sencha Touc

2011-07-25 16:21:22

Sencha touc

2011-10-26 10:12:53

Sencha Touc布局

2011-09-30 14:15:10

Sencha ToucSencha Touc

2011-09-02 15:42:55

Sencha Touc布局

2011-09-02 15:58:38

Sencha Touc布局

2011-10-18 08:59:46

Sencha ToucHTML5

2012-05-01 20:57:26

Sencha Touc

2011-11-16 13:14:02

Sencha TouciOS本地應(yīng)用

2011-09-02 16:08:09

Sencha ToucAPI文檔

2010-11-22 10:31:17

Sencha touc

2011-07-26 09:41:50

Sencha Touc特性HTML 5

2011-09-05 11:23:26

EclipseSencha Touc框架

2011-07-25 15:55:21

Sencha ToucHtml 5

2011-09-02 16:42:51

Sencha ToucWeb應(yīng)用

2011-09-05 10:20:21

Sencha ToucAPP
點(diǎn)贊
收藏

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