Dorado on the way
2007年1月1日
關(guān)于Dataset
可以通過RecordIterator 對dataset中的數(shù)據(jù)進(jìn)行遍歷(包括已經(jīng)在客戶端“刪除”的記錄)。
為什么在客戶端已經(jīng)“刪除”的記錄,dataset仍然可以遍歷到?
原因就在于Dorado出于對性能的考慮,在客戶端做的刪除并沒有立刻更新服務(wù)器段的記錄,而僅僅是在客戶端的dataset中做了刪除的標(biāo)記。在用戶提交了以后,才會對服務(wù)器端的記錄做修改。所以用戶在客戶端做的刪除操作后,如果刷新頁面,刪除的記錄將會重新出現(xiàn)。
可以通過如下代碼對dataset中已經(jīng)標(biāo)記為“刪除”的記錄進(jìn)行遍歷:

?2

?3

?4

?5



?6

?7

?8

?9

10

11

12

?
isFirst 以及 isLast的理解
在dataset中容易犯下的錯誤就是對isFirst和isLast的誤解。
isFirst和isLast并不像大家想象當(dāng)中的那樣,代表著Dataset的當(dāng)前記錄(注意,所有對Dataset的操作,都是對“當(dāng)前記錄”而言)是否是第一條記錄或者是最后一條記錄。他們真正的含義如下:
??????????isFirst:
??????????官方解釋:
??????????????????isFirst表示Dataset已經(jīng)在試圖繼續(xù)向前移動當(dāng)前記錄的過程失敗,亦即當(dāng)dataset的當(dāng)前記錄從第二條記錄轉(zhuǎn)到第一條記錄時isFirst仍然是false,只有當(dāng)Dataset試圖繼續(xù)向前移動當(dāng)前記錄后,isFirst才會變成 true,此時dataset的當(dāng)前記錄仍然是第一條記錄。
?????????我的理解:
??????????????????對于isFirst,你可以于Java當(dāng)中的Iterator作對比。我們假設(shè)Java中的 Iterator具有previous(),就是next()倒著遍歷(),那么當(dāng)當(dāng)前記錄從第二條作previous()成功到達(dá)第一條記錄的時候,isFirst仍然返回false,為什么?因?yàn)樵谝苿舆^程中沒有受阻,它成功的前移了。下面要注意了,現(xiàn)在當(dāng)前記錄已經(jīng)在第一條了,現(xiàn)在如果當(dāng)前記錄再試圖向前移動時,此時受阻了,因?yàn)樵诋?dāng)前記錄前面已經(jīng)沒有記錄可以移動了,此時 isFirst()返回true。
如下圖:
在dorado的設(shè)計過程中,數(shù)據(jù)導(dǎo)航條的數(shù)據(jù)前移和后移過程中,并不會查看當(dāng)前記錄是否是第一條或者是最后一條數(shù)據(jù),而是默認(rèn)前或者后還有數(shù)據(jù),從而繼續(xù)作向前或向后的操作,只有在移動受阻后,才修改是否到邊界的標(biāo)記,這樣或許在移動操作中可能會對移動的性能有一定的幫助。
個人認(rèn)為,這里把isFisrt()看作是對當(dāng)前記錄的操作時候“越界”的標(biāo)志更為合適。
IsLast:
官方的解釋:
isLast表示Dataset已經(jīng)在試圖繼續(xù)向后移動當(dāng)前記錄的工程失敗,亦即當(dāng)dataset試圖繼續(xù)向前移動當(dāng)前記錄后,isFirst才會變?yōu)?font face="Times New Roman, serif">true,此時 Dataset的當(dāng)前記錄仍然是倒數(shù)第一條記錄。
我的理解:
可以對比isFirst來理解,我覺得我已經(jīng)解釋的比較清楚了。
moveFirst 和 moveLast方法
當(dāng)用戶調(diào)用了Dataset的moveFirst或moveLast之后,Dataset的isFirst或isLast立刻被置為true。
當(dāng)dataset沒有任何可見記錄的時候,isFirst和isLast將同時為true,并且當(dāng)前記錄為null。
想必在前面理解了我對isFirst和isLast的講解之后,對這兩個方法的理解應(yīng)該不會出現(xiàn)什么偏差了。
?????????不過我想提醒大家一下,注意我這里的用詞,是“可見記錄”,即是說,如果在客戶端刪除了所有的記錄,雖然沒有向服務(wù)器提交,
?????????但此時isFirst和isLast都會同時返回true。這里就很好的統(tǒng)一了對用戶的“體驗(yàn)一致性”,即用戶認(rèn)為已經(jīng)沒有數(shù)據(jù)了。
不知道大家有沒有在瀏覽器中查看過Dorado生成的jsp文件的源代碼,其實(shí)這些源代碼都是通過html和xml界面模板信息共同展現(xiàn)的。
Dorado內(nèi)部加載順序:
第一步: 客戶端發(fā)出請求
??????????????????????????????第二步:初始化 視圖模型
??????????????????????????????第三步:初始化 Dataset
??????????????????????????????第四步:初始化 組件
??????????????????????????????第五步:完成組件與Dataset之間的綁定
??????????????????????????????第六步: Dataset向外部請求數(shù)據(jù),完成數(shù)據(jù)加載
??????????????????????????????第七步:向客戶端返回HTML/XML界面模板信息
??????????????????????????????第八步:完成,顯示頁面
Dataset中最重要的方法: flushData()
?????????功能我想我不說大家也知道,就是通過不刷新頁面來實(shí)現(xiàn)數(shù)據(jù)更新與交換。
未完待續(xù)。。。
如果沒有IE,可以給我發(fā)EMail,shjy.nicholas@gmail.com,我會回信發(fā)給大家。
歡迎大家留言討論關(guān)于Dorado的問題。