一、树型数据
下面介绍一下Data组件的树型数据特性
Data的数据是按行(Row)存储进行存储的,当然树型数据也是按行(Row)存储,只是针对树特点在Row上增加了rows存放子行

  rows : [
    {
      rows: [...],
      ...
    },...
  ]

1、Data组件树相关属性
isTree : boolean 树型数据标识
treeOption :Object 树型数据相关参数
包括属性:
parentRelation: 父关系,形成父子树的父关系
rootFilter: 根过滤条件,当设置时树形数据将按节点加载数据
delayLoad: 延迟数据加载,默认值为true
nodeKindRelation: 节点类型关系,data操作时使用指定relation自动记录是否叶子节点信息

2、Data组件树相关api
Data.getTreeOption();——–获取树的定义信息,返回TreeOption
TreeOption包括属性:
isDelayLoad 数据分级加载,进入叶子节点进行数据加载
parentRelation 父关系,形成父子树的父关系
rootFilter 根过滤条件,当设置时树形数据将按节点加载数据
nodeKindRelation 节点类型关系,data操作时使用指定relation自动记录是否叶子节点信息
可以直接修改TreeOption相关属性影响Data

Data.isTree();——–判断当前data是不是tree数据,返回Boolean
Data.isLeaf(Row);——–判断给定行是不是叶子节点,受TreeOption.nodeKindRelation影响,返回Boolean,参数Row为Data.Row
Row.parent();——–行数据的parent对象,当是树形数据时有效
Row.children();——–获取行数据的子数据,但没有时返回undefined
Row.hasChildren();——–行数据是否有子数据

Data.each(callback);Data.eachAll(callback);——–当data为tree数据时,callback遍历回调函数的参数中parent给出父Row

另外参数部分给出parent参数的函数都是支持tree数据的,即:函数执行范围在parent下,默认当没有给出parent时指tree的根数据,如:
Data.loadData(data,append,parent)加载数据到parent下
Data.add(defaultValue,parent)增加数据到parent下
Data.newData(option)新增数据到option.parent下
Data.getCount(parent)获取parent下行记录数
Data.getTotal(parent)获取parent下总记录数
Data.getOffset(parent)获取parent下偏移

3、树型加载、删除和保存
BizData树型数据加载逻辑
delayLoad=true时数据是按树型层级加载的,即data在refreshData时只是加载根数据,其他层数据通过相关树型组件(tree、treeGrid等)驱动加载或者通过data的api进行加载;
同时树根数据由rootFilter决定,缺省rootFilter=parentRelation is null;其他层级的数据在执行数据查询时自动增加parentRelation = parent.val(parentRelation)条件;
这种分级加载逻辑基本等同于普通数据加载,只是加载数据放在不同rows下;
当delayLoad=false时表示树型数据一次全部加入,返回数据同上面介绍的row—rows树型数据结构
BizData树型数据删除同普通数据删除,data组件没有提供级联删除子的能力,如果需要级联删除子可以使用biz层关系上的高级中的级联删除设置
BizData树型数据保存,首先把修改的数据行处理层二维table的结构,然后就是正常的BizData保存逻辑了

二、主从数据
主从数据是业务场景中经常遇到的形式,data组件默认支持了主从数据的处理;
当主数据游标滚动时会主动刺激从数据加载或者过滤,当然主从的层数没有限制,这是一个递归级联刷新刺激过程

1、主从数据相关属性
master:{object} 主从参数
包括属性:
data: 主数据的XID
column: 和masterData关联的列,可以理解为数据库中的外键

autoLoad:{boolean} 自动加载数据,这个属性当data为从data时决定,是不是根据主data自动加载数据,如果从data的autoLoad=false时,从data的数据需要开发者主动调用refreshData等方法进行数据加载

2、主从数据相关api
Data.each(callback);——-遍历当前和主关联的从数据
Data.eachAll(callback);——-遍历data的全部数据
Data.isSelfChanged();——-判断data自身是否修改
Data.isSlaveChanged();——-判断从data是否修改
Data.isChanged();——-判断data是否修改,包括从data的修改状态

3、主从数据加载、删除和保存
主从BizData数据加载和普通data加载逻辑基本一致,只是在从数据查询时增加了filter:master.column=masterData.getCurrentRow().getID()
同树型BizData逻辑一样,data组件没有实现前端数据的级联删除,同样需要在biz端设置整体部分关系来实现级联删除,或者通过数据库的外键特性
主从BizData数据的保存保证了事务,也就是说主从关联的所有data在一个批事务内完成,保存顺序是先主后从

三、BizData的更新模式
更新模式属性:BizData.updateMode
数据更新模式,取值:whereVersion/whereAll
BizData更新数据的原理:
解决数据更新冲突平台采用乐观锁实现,简单说就是多个人同时更新一条数据时只会一个更新成功;
平台中更新模式有两种:whereVersion,whereAll,其实还可以增加whereKey(目前没有)
whereVersion更新数据时使用key和version作为条件更新,使用data的save时平台会自动维护version,也就是说在更新语句中会做version+1,当version变化时说明数据已经被人修改,当前更新失败回滚
whereAll模式使用所有查询列的旧值做更新的条件,当条件不满足就说明数据已经被人修改,当前更新失败回滚
从数据严格性上说:whereKey<whereVersion<whereAll
平台BizData默认使用whereVersion

上一篇 Data组件基础03

下一篇 Data组件基础05

本文由WeX5君整理,WeX5一款开源免费的html5开发工具H5 App开发就用WeX5!

阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443