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

?2

?3

?4

?5



?6

?7

?8

?9

10

11

12

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