## Data组件基础04:Tree、主从数据、更新模式
**一、树型数据**
下面介绍一下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
- 快速入门
- 第一个应用
- WeX5产品能力和技术
- wex5技术理念
- WeX5可以怎么玩?
- WeX5和BeX5比较
- UI2开发
- UI2前端框架基础01:应用和页面
- UI2框架基础02:框架结构图和目录
- 组建基础
- 编程基础
- js引用
- css、text引用
- 设置资源依赖
- 代码调试
- 数据组件
- Data组件基础01:列、初始化加载状态、行对象和游标
- Data组件基础02:规则、数据遍历查找
- Data组件基础03:CRUD
- Data组件基础04:Tree、主从数据、更新模式
- Data组件基础05:再谈Data组件新增,查询,保存
- Data组件的JSON数据格式
- WeX5 & BeX5 页面框架核心之数据绑定
- 数据绑定属性系列
- 初识绑定
- visible绑定
- text绑定
- html绑定
- css绑定
- 页面布局
- 页面样式
- 样式基础
- 添加自定义图标(iconfont)
- 常用组件
- bar组件
- contents组件
- 前端路由和页面跳转
- 路由模块
- 页面跳转
- 部署和发布
- 三种部署方式
- Web app部署
- UIServer的缓存机制
- 自定义组件开发
- 组件运行时开发案例
- 组件设计时开发案例
- 组件设计时开发参考
- 属性编辑器配置和开发
- 自定义向导开发(waiting)
- 第三方库集成
- 集成Echarts
- 集成百度和高德地图
- App开发
- 打包
- App打包基础和常见问题
- App打包原理和目录结构
- App打包过程详解
- App打包服务器环境搭建
- 苹果证书申请 使用
- Android和IOS的本地应用图标规范
- Android和IOS的本地App如何安装(apk&ipa)
- 苹果App部署HTTPS进行在线下载安装
- 调试
- Android和IOS真机调试
- 插件
- 如何使用和扩展cordova插件
- cordova插件开发
- 常用cordovar插件
- SQLite插件
- 极光推送(JPush)插件
- 微信支付入门教程
- 微信、支付宝支付开发
- 服务端开发
- App与服务端交互原理
- 轻量级Baas(视频)(文字) (.net版)
- Data组件的JSON数据格式11
- 微信服务号集成(视频)
- 扩展学习资料
- bootstrap
- Knockoutjs
- JQuery
- requirejs
- phonegap/cordova