另外,Ext官方提供的例子都是用JavaScript來(lái)創(chuàng)建和初始化控件,一個(gè)JavaScript配套一個(gè)HTML來(lái)用,這樣管理起來(lái)很混亂。而且官方例子是Best Practice,所以不太接受這種模式。Dojo在本人眼里是一個(gè)缺點(diǎn)和優(yōu)點(diǎn)都很突出的家伙:
缺點(diǎn):
1、文檔非常之差;
2、CodeBase非常之大(優(yōu)點(diǎn)乎,缺點(diǎn)乎?);
3、版本演進(jìn)快,且每次版本演進(jìn),都有大量的API發(fā)生變化,還不夠成熟。
優(yōu)點(diǎn):
1、是一個(gè)很優(yōu)秀的控件開(kāi)發(fā)框架;
2、完全體現(xiàn)了javascript面向?qū)ο蟮囊幻妗?/P>
EXT和Dojo比起來(lái),本人覺(jué)得EXT是一個(gè)控件庫(kù),而Dojo是一個(gè)框架。第一次接觸Dojo,當(dāng)時(shí)版本0.3.X,今天項(xiàng)目中又有需求想用Dojo,版本是1.3.1,對(duì)比0.3和1.3,發(fā)現(xiàn)核心的思路并沒(méi)有太大變化,但出廠提供的控件卻有翻天覆地的變化,不過(guò)已經(jīng)先入為主的對(duì)它的控件有成見(jiàn),導(dǎo)致現(xiàn)在也沒(méi)有興趣再去研究,還是講講如何拿Dojo做自定義的控件吧。Dojo很復(fù)雜,但我們可以簡(jiǎn)單的認(rèn)為它分三層:
1、最底層的是核心API
核心API提供的方法簡(jiǎn)化了DOM、字符串、CSS、事件等相關(guān)的操作。核心API還實(shí)現(xiàn)了類(lèi)似于Java的package概念和import機(jī)制,方便了代碼組織和依賴(lài)管理。
2、基于核心API,創(chuàng)造了“控件生命周期”概念
這是Dojo的亮點(diǎn),允許第三方以規(guī)范的方式開(kāi)發(fā)控件?;贒ojo開(kāi)發(fā)的控件具有很強(qiáng)的內(nèi)聚性和面向?qū)ο蟮奶匦浴?/P>
3、基于2所開(kāi)發(fā)的各類(lèi)控件
Dojo自己提供的控件也比較全了,只是由于歷史原因,沒(méi)有深入研究過(guò)。
Dojo的控件統(tǒng)稱(chēng)DIJIT,要寫(xiě)出Dojo版的Hello World控件,你需要了解的知識(shí)并不太多:
◆一個(gè)控件就是一個(gè)JS類(lèi);
◆所有的控件都繼承自_Widget或其子類(lèi),_Widget類(lèi)提供了控件的生命周期管理函數(shù);
◆可以同時(shí)繼承_Templated,繼承該類(lèi),可以為控件綁定模板來(lái)描述控件的展示。
關(guān)于_Widget基類(lèi)的介紹
1、生命周期方法
_Widget提供了一系列方法稱(chēng)為“生命周期方法”,Dojo框架在初始化一個(gè)控件的時(shí)候,會(huì)依次調(diào)用它們,我們的自定義控件,可以重寫(xiě)特定的方法來(lái)加入自己的初始化邏輯,方法調(diào)用順序及說(shuō)明:
代碼如下:
preamble(/*Object*/ params, /*DOMNode*/node)
//這是一個(gè)通常不會(huì)用到的方法,這個(gè)方法的返回值,作為constructor的輸入?yún)?shù)param
constructor(/*Object*/ params, /*DOMNode*/node)
// 這個(gè)方法相當(dāng)于java類(lèi)的構(gòu)造函數(shù)
// 在這個(gè)類(lèi)中執(zhí)行初始化動(dòng)作
postscript(/*Object*/ params, /*DOMNode*/node)
//實(shí)際的控件創(chuàng)建過(guò)程,依次調(diào)用如下方法(都可以被重寫(xiě))
_Widget.create(/*Object*/params, /*DOMNode*/node)
_Widget.postMixInProperties( )
_Widget.buildRendering( )
_Widget.postCreate( )
//我用得最多的是postCreate方法,這個(gè)方法中,控件已經(jīng)初始化完畢,界面上也已經(jīng)顯示出來(lái)了,
//通常在這個(gè)方法中啟動(dòng)業(yè)務(wù)相關(guān)的處理
2、該類(lèi)的幾個(gè)重要屬性(控件可以通過(guò)this訪問(wèn))
◆id:控件被授予的唯一編號(hào),如果用戶不指定,則Dojo隨機(jī)創(chuàng)建一個(gè)。
◆domNode:該控件在HTML中對(duì)應(yīng)的DOM節(jié)點(diǎn)。
最基本的自定義控件示例:
js文件:./hello/world.js(以下涉及到文件名,都用相對(duì)路徑,其中./代表和"Dojo,dijit,Dojox"同級(jí)目錄)。
代碼如下:
//聲明自己輸出的類(lèi)名
Dojo.provide("hello.world");
//聲明自己依賴(lài)的類(lèi)名Dojo.require("dijit._Widget");
Dojo.require("dijit._Templated");
//Dojo.declare定義控件類(lèi),第一個(gè)參數(shù):類(lèi)名,第二個(gè)參數(shù):父類(lèi)數(shù)組,第三個(gè)參數(shù):類(lèi)的prototype
Dojo.declare("hello.world",[dijit._Widget,dijit._Templated],
{
postCreate:function(){
this.domNode.innerHTML="hellow world";
}
}
);
該控件的行為極其簡(jiǎn)單,在postCreate方法中,將自己在HTML頁(yè)面中對(duì)應(yīng)的DOM節(jié)點(diǎn)的內(nèi)容設(shè)置為hellow world。
代碼如下:
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com