Dorado on the way

200711



关于Dataset


  1. 可以通过RecordIterator dataset中的数据进行遍历(包括已经在客户端“删除”的记录)

    为什么在客户端已经“删除”的记录,dataset仍然可以遍历到?

    原因就在于Dorado出于对性能的考虑,在客户端做的删除并没有立刻更新服务器段的记录,而仅仅是在客户端的dataset中做了删除的标记。在用户提交了以后,才会对服务器端的记录做修改。所以用户在客户端做的删除操作后,如果刷新页面,删除的记录将会重新出现。

    可以通过如下代码对dataset中已经标记为“删除”的记录进行遍历:

 1RecordIterator rit = dataset.recordIterator() ; // 获取dataset的遍历器
 2
 3            rit.setVisibility(Dataset.FILTER_DELETED) ; // 设置遍历器的可见属性
 4
 5            while(rit.hasNext()){
 6
 7                     Record record = rit.nextRecord() ; // 取得当前的Record对象
 8
 9                     // 对记录进行操作
10
11            }

12

 

  1. isFirst 以及 isLast的理解

    dataset中容易犯下的错误就是对isFirstisLast的误解。

    isFirstisLast并不像大家想象当中的那样,代表着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来理解,我觉得我已经解释的比较清楚了。



  1. moveFirst moveLast方法

    当用户调用了DatasetmoveFirstmoveLast之后,DatasetisFirstisLast立刻被置为true

    dataset没有任何可见记录的时候,isFirstisLast将同时为true,并且当前记录为null

    想必在前面理解了我对isFirstisLast的讲解之后,对这两个方法的理解应该不会出现什么偏差了。

         不过我想提醒大家一下,注意我这里的用词,是“可见记录”,即是说,如果在客户端删除了所有的记录,虽然没有向服务器提交,
         但此时isFirstisLast都会同时返回true。这里就很好的统一了对用户的“体验一致性”,即用户认为已经没有数据了。



  1. 不知道大家有没有在浏览器中查看过Dorado生成的jsp文件的源代码,其实这些源代码都是通过htmlxml界面模板信息共同展现的。



  1. Dorado内部加载顺序:

        第一步: 客户端发出请求

                              第二步:初始化 视图模型

                              第三步:初始化 Dataset

                              第四步:初始化 组件

                              第五步:完成组件与Dataset之间的绑定

                              第六步: Dataset向外部请求数据,完成数据加载

                              第七步:向客户端返回HTML/XML界面模板信息

                              第八步:完成,显示页面


  1. Dataset中最重要的方法: flushData()

         功能我想我不说大家也知道,就是通过不刷新页面来实现数据更新与交换。


未完待续。。。