## 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