成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

講解webOS開發的Enyo基礎

移動開發
本文我們將講解webOS開發的Enyo一些框架的基礎概念. 包括:Kinds(種類), Components(組件), and Controls(控件)等內容。

這個文章和下一篇文章Enyo基礎 – Kinds(種類), Components(組件), and Controls(控件)介紹了一些框架的基礎概念. 我們假設作為一個Enyo開發者的你, 至少了解一些web開發的基礎, 所以我們從與Enyo開發相關的HTML和JavaScript說起.

Enyo和HTML (Controls)

Control是一個基本的Enyo對象. Control工作原理各DOM節點有些類似; 事實上, 每個Control通常會轉換成一個DOM的節點.

這里我們創建一個Control并把它渲染到body中:

  1. enyo.create({ 
  2. content: "Hello World" 
  3. }).renderInto(document.body); 

這小段代碼會產生下面的HTML:

  1. <div>Hello World</div>

Control對象類似于一個DOM節點,你可能給它指定CSS名稱和樣式, 你也可以選擇生成哪種類型的節點. (注意:在HTML中使用”class”來指定CSS名稱, 不過class是JavaScript中的關鍵詞, 所以Enyo規定使用”className”.)

  1. enyo.create({ 
  2.  
  3. nodeTag: "span", 
  4.  
  5. className: "a-css-class", 
  6.  
  7. style: "color: purple;", 
  8.  
  9. content: "Hello World" 
  10.  
  11. }).renderInto(document.body); 

這會產生下面的HTML:

  1. <span class="a-css-class" style="color: purple;">Hello World</span>

我們可以像使用DOM節點一樣嵌套使用control.

  1. enyo.create({ 
  2.  
  3. components: [ 
  4.  
  5. {content: "I'm in a container"}, 
  6.  
  7. components: [ 
  8.  
  9. {content: "I'm in a container that's in the container."} 
  10.  
  11. ]}, 
  12.  
  13. {content: "I'm in the first container."} 
  14.  
  15.  
  16. }).renderInto(document.body); 

(注意我們在”components”塊中定義control. Control kind派生自Component kind, 所以component是一個比control更基礎的對象. 因而components塊可以既包含Control對象,又包含非control對象.更多關于components 和control的信息請參考 “Enyo Basics基礎kind, Components和Control”.)

為什么要為JavaScript生成HTML困惑呢? 我們的目標是去掉大家對Enyo的神秘色彩; 一旦我們開始創建程序, 我們將會發現使用control而不是HTML會減少很多問題.

例如, 一個明顯的好處是control中可以裝入很多復雜的渲染和行為:

  1. enyo.create({ 
  2.  
  3. components: [ 
  4.  
  5. // button with custom graphics 
  6.  
  7. {kind: "Button"}, 
  8.  
  9. // input box with special features like hinting and graphic fx 
  10.  
  11. {kind: "FancyInput"}, 
  12.  
  13. // one-of-many selector with custom graphics 
  14.  
  15. {kind: "RadioGroup", components: [ 
  16.  
  17. {label: "Alpha"}, 
  18.  
  19. {label: "Beta"}, 
  20.  
  21. {label: "Gamma"} 
  22.  
  23. ]} 
  24.  
  25.  
  26. }).renderInto(document.body); 

上面的代碼會渲染出下面的效果:

 

Enyo和JavaScript (Kinds)

使用函數和prototype,JavaScript原生的支持對象模板和繼承. 這里是一個標準的JavaScript用法:

  1. // 一個對象構造函數 
  2.  
  3. MyObject = function() { 
  4.  
  5. this.data = []; 
  6.  
  7. }; 
  8.  
  9. MyObject.prototype.toString = function() { 
  10.  
  11. return this.data.join(", "); 
  12.  
  13. }; 
  14.  
  15. //另外一個對象構造函數, 在***個基礎上建立 
  16.  
  17. MySpecialObject = function() { 
  18.  
  19. MyObject.apply(this, arguments); 
  20.  
  21. }; 
  22.  
  23. MySpecialObject.prototype = new MyObject(); 
  24.  
  25. MySpecialObject.prototype.toNumber = function() { 
  26.  
  27. return this.data.length; 
  28.  
  29. }; 
  30.  
  31. //創建實例 
  32.  
  33. mso = new MySpecialObject(); 

在保持JavaScript面向對象特性的同時, Enyo用緊湊的語法提供了一個產生構造函數(對象模板)的方法. 這種方法構建的Constructor有一些特性,我們叫它 kinds. 這種用來創建kind的方法叫做enyo.kind. 這里是一個enyo.kind的例子:

  1. // 一個kind 
  2.  
  3. enyo.kind({ 
  4.  
  5. name: "MyKind", 
  6.  
  7. constructor: function() { 
  8.  
  9. this.data = []; 
  10.  
  11. }, 
  12.  
  13. toString: function() { 
  14.  
  15. return this.data.join(", "); 
  16.  
  17.  
  18. }); 
  19.  
  20. // 在***個kind的基礎上建立的又一個kind 
  21.  
  22. enyo.kind({ 
  23.  
  24. name: "MySpecialKind", 
  25.  
  26. kind: "MyKind", 
  27.  
  28. toNumber: function() { 
  29.  
  30. return this.data.length; 
  31.  
  32.  
  33. }); 
  34.  
  35. // 創建一個實例 
  36.  
  37. msk = new MySpecialKind(); 

(注意: 我們為什么使用”kind”? 這些constructor不算是types或者classes, 而是一種特別的Object. 在db8中也有相似的概念, db8的record schema也叫做kind. 而且JavaScript使用原型繼承基于類的繼承, 所以在Enyo中使用”class” 會使用產生困惑.)

有一點很重要:enyo.kind并不神奇–它執行普通的步驟來產生一個constructor,只是隱藏了樣板文件.

這個例子中有幾點需要注意:

kind的名稱是在屬性塊中指定的. 這個名稱將會變成一個全局的變量用來引用kind. 把名稱放在塊中,可以很容易的使用namespace(命名空間). 例如:

  1. enyo.kind({name: "Super.Special.Kind"}); 

Enyo會自動創建namespaces Super和Super.Special, 且 Super.Special.Kind將引用到新創建的constructor.

初始化代碼放在constructor方法中. 這和***個例子中的MyObject方法體非常類似. 主要的區別是當繼承自kind時, constructor 方法并不被調用 (如果你仔細看***個例子, 你可以發現調用MyObject來為MySpecialObject創建prototype, MySpecialObject最終在自己的prototype中創建了一個外部的data數組.)

為了創建一個繼承自舊的kind的新kind, 需要在新kind的kind屬性中指定舊kind的名稱. 上面的例子中, MySpecialKind繼承自MyKind.

剛開始,可能這些kind看起來很困惑, 但歸根到底: 不管什么時候,我們創建一個東西, constructor或者實例, 我們需要說明是以哪個kind為基礎. 創建一個實例時我們可以這么做:

  1. enyo.create({kind: "aKind"}); 

(注意: enyo.create的輸入是一個JavaScript對象,描述了要創建了對象. 這種輸入的kind叫做”property block” 或”property bag”.)

同樣的,在已存在的kind上創建一個新的kind, 這么做:

  1. enyo.kind({kind: "aKind"}); 

這種代碼的一致性使我們很容易記住語法.

責任編輯:佚名 來源: baiyuxiong.com
相關推薦

2011-07-07 10:40:18

Enyokindscomponents

2011-07-18 10:57:58

webOSEnyo系統服務

2010-11-23 08:39:41

EnyowebOS 2.0WebOS

2011-07-01 11:02:30

EnyowebOShello world

2011-07-01 10:52:59

EnyowebOS 3.0 S

2012-05-26 23:32:54

webOS

2012-05-27 08:05:00

惠普webOS集體離職

2011-04-06 15:55:50

開發webOS程序webOS

2011-04-13 15:31:53

webOS 2.0開發者大會webOS

2012-02-08 09:49:02

惠普webOS開源

2012-02-15 14:48:16

2012-02-03 15:12:03

Open webOSwebOS惠普

2009-04-03 11:12:43

PalmwebOS開發

2011-09-05 14:21:29

webOS

2012-03-07 09:49:01

webOS開源

2011-05-20 10:12:11

webOSGeek

2009-04-03 08:36:53

PalmWebOSsdk

2010-06-29 12:22:01

MGCP協議

2010-08-23 17:16:16

DHCP協議

2012-06-19 14:10:52

PalmwebOS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品一区二区在线 | 五月激情婷婷在线 | 韩国精品一区 | 久操伊人 | 精品国产鲁一鲁一区二区张丽 | 日韩一区二区视频 | 羞羞的视频免费看 | 国产精品一区二区av | 亚洲精品在线视频 | 免费在线黄色av | 欧美精品一区二区三区在线四季 | 国产福利资源在线 | 一区二区成人 | 午夜影院在线观看 | 视频一区二区三区在线观看 | 91久久久www播放日本观看 | 欧美精品一区在线发布 | 久草视频在线播放 | av在线一区二区三区 | 免费黄色日本 | 亚洲成av| 亚洲性人人天天夜夜摸 | 日韩电影一区二区三区 | 久久久精品一区二区三区 | 91久久久久久久久 | 久久99视频| 色婷婷av一区二区三区软件 | 一区二区三区影院 | 中文字幕久久精品 | 亚洲协和影视 | 亚洲精品欧美 | 国产九一精品 | 偷拍自拍在线观看 | 成年网站在线观看 | 高清欧美性猛交xxxx黑人猛交 | 高清亚洲 | 国产欧美日韩综合精品一区二区 | 欧美在线视频网 | 国产农村妇女毛片精品久久麻豆 | 国产综合久久久 | 欧美1区|