??? 本來是計(jì)劃讓團(tuán)隊(duì)內(nèi)的同事一起總結(jié)使用qooxdoo的使用經(jīng)驗(yàn)和困難,然后寫些關(guān)于使用qooxdoo的總結(jié)供大家參考,但因?yàn)轫?xiàng)目的原因到現(xiàn)在也沒有時(shí)間辦這件事情,所以打算還是零零碎碎的寫一點(diǎn)是一點(diǎn),亂就亂了,今后再整理。另外最近發(fā)現(xiàn)其實(shí)國(guó)內(nèi)還是有不少人關(guān)注和使用qooxdoo的,所以立馬寫下這個(gè)帖子拋磚引玉。
1、qooxdoo基本信息??? qooxdoo帶有XHR的封裝,但其主要的還是WEB UI,提供了類似桌面程序的窗口小部件。
??
http://m.tkk7.com/ynstudio/archive/2006/07/23/59648.html? 從上面的鏈接可以看到我們開發(fā)的一個(gè)項(xiàng)目中的幾個(gè)截圖,也可以到其官方網(wǎng)看其demo。
? 官方網(wǎng)站
http://qooxdoo.org/?,在官方網(wǎng)站上可以看到其下載地址,有兩個(gè)文件,一個(gè)是src一個(gè)是build,所謂build就是把所有的src里的js文件都合并到一個(gè)js文件里,排成一行,去除注釋,從而縮小體積,但也有700多K。
??
http://www.nabble.com/Javascript-f15545.html?是一個(gè)關(guān)于幾個(gè)javascript應(yīng)用的論壇,其中就有qooxdoo的,你可以從這里了解其動(dòng)態(tài),參與相關(guān)的討論。
2、RPC??? 如果使用qooxdoo,而不使用XHR,那么頁(yè)面就需要刷新,這個(gè)是麻煩的。我們本來是使用的DWR,現(xiàn)在使用的是經(jīng)自己改造的JSON-RPC-JAVA。現(xiàn)在java里似乎主要就是這兩個(gè)。其他語(yǔ)言的話,如.net,perl,php都有json-rpc的實(shí)現(xiàn)。使用了類似JSON-RPC-JAVA和dwr這樣的技術(shù),開發(fā)模式就類似一般的C/S開發(fā)了,當(dāng)然困難還是有的。
3、我們使用qooxdoo遇到的一些困難????? A、首先是界面的開發(fā),雖然類似C/S的開發(fā)方式了,不再存在頁(yè)面刷新帶來的煩惱,思考問題更加直接,不需考慮參數(shù)傳來傳去,不需學(xué)習(xí)一堆的標(biāo)簽,特別是對(duì)于剛接觸WEB開發(fā)的程序員,接受起來更加容易。但是界面都是使用代碼來構(gòu)建的,而javascript也沒有很好的編輯工具。所以剛開始開發(fā)時(shí)還是滿痛苦的。后來有了些改觀,1、規(guī)范代碼結(jié)構(gòu),界面代碼,事件響應(yīng)代碼,公用函數(shù),歸類擺放;2、選擇更好的編輯工具,如JSEclipse,aptana等;3、使用調(diào)試工具,我認(rèn)為firefox的firebug是最好的;4、盡量把邏輯放在java里,降低界面javascript的復(fù)雜度。另外今后我們將推廣QxBuilder的使用。
??? B、layout的使用。對(duì)于我們這些開發(fā)人員,習(xí)慣使用table來進(jìn)行布局,在qooxdoo里只有QxGridLayout最象,但不好使用。我們開發(fā)了一些輔助方法來降低其使用難度。
??? C、沒有類似HTML里的Form。使用qooxdoo加RPC其實(shí)不存在,HTML中的Form+submit的方式,但直接對(duì)fieldtext等進(jìn)行操作,感覺不如form方便,所以我們開發(fā)了一個(gè)FormManager來進(jìn)行輔助。
??? D、中文資料少,或者說基本上沒有,有的只是些轉(zhuǎn)來轉(zhuǎn)去的沒用的文字。
??? E、效率問題,起初為了方便開發(fā),主頁(yè)面和其他頁(yè)面之間都是用QxNativeWindow的方式,即window.open,但由于IE的問題,以及qooxdoo 700k 的代碼,導(dǎo)致每打開然后關(guān)閉一個(gè)新窗口,內(nèi)存以6~10M的速度遞增。這個(gè)問題的解決有兩個(gè)方案,一個(gè)是不允許同時(shí)打開兩個(gè)窗口,所有的頁(yè)面都在一個(gè)iframe里切換,另外就是在主頁(yè)面里使用QxWindow,但一個(gè)使用不方便,一個(gè)開發(fā)不方便。
4、排序的問題??? 這個(gè)是福星高照兄發(fā)現(xiàn)的,原文如下
qooxdoo默認(rèn)用的是sort方法,這個(gè)方法的排序是按照字符集的順序來的
關(guān)于中文排序問題,可以修改QxCompare.js,把QxCompare.byString的方法改了,倒是很簡(jiǎn)單,改成return a.localeCompare(b);
localeCompare()使用本地特定的順序來比較兩個(gè)字符串,語(yǔ)法如下:
string.localeCompare(target)
參數(shù)target是要與string進(jìn)行比較的字符串。
如果string小于target,則localeCompare()返回小于0的數(shù);
如果string大于target,返回大于0的數(shù);
如果不愿意改QxCompare.byString,那么添加一個(gè)compare對(duì)象也成。
本來我以為是我用的是utf-8導(dǎo)致排序按照utf-8里的漢字排序,但我測(cè)試發(fā)現(xiàn),即便是純的GBK頁(yè)面,Array的sort方法也不是按照字母順序進(jìn)行排序的。這個(gè)福星高照兄也提到了。