## Data組件基礎03:CRUD
**一、新增**
**1、Data組件的新增相關API:**
Data.newData(option);——–后端新增,返回一行或者多行新增數據
option參數說明:
{
"parent" : Data.Row - 樹形數據的父(非樹形不需要),
"index" : integer - 新增數據的位置,缺省新增到最后,
"defaultValues" : array - 新增行的默認值數組 ,數組的長度決定新增行數,數組中的對象是列的默認值
defaultValues格式:
[
{列名:默認值,...},
{列名:默認值,...},
...
]
"onError" : function - 失敗回調函數,function(event);
event的格式:
{
"source" : {Data} - 組件的js對象,
"errorType" : {string} - 'server',
"errorNode" : {object} - 錯誤信息,
"httpError" : {boolean} - 是否http請求失敗,
"httpState" : {string} - http請求返回碼
}
"onSuccess" : function - 成功回調函數,function(event);
event的格式:
{
"source" : {Data} - 組件的js對象,
"rows" : {List} - 新增行的數組
}
}
Data.add(defaultValues,parent);——–前端新增一行數據,狀態需要開發者設定,defaultValues,parent參數同上;不會觸發data相關事件
**2、新增數據相關事件:**
onBeforeNew(event)——-新增前,可以通過event.cancel=true終止新增動作
event說明:
{
"source" : 組件的js對象,
"options" : 新增時傳入的option參數,包括:parent,defaultValues
"cancel" : 可修改,設置為true后中斷當前new動作
}
onCustomNew(event);——業務數據新增接管,完全接管new動作,需要接管此事件完成data的newData邏輯
event說明:
{
"source" : 組件的js對象,
"options" : 新增時傳入的option參數,包括:parent,defaultValues
"data" : 行數據對象數組即返回的新增數據,數組的length決定新增的行數
data格式:
[
{
"列名" : 默認值,
"列名" : 默認值,
...
},
...
]
}
onAfterNew(event);——業務數據新增后
event說明:
{
"source" : 組件的js對象,
"options" : 新增時傳入的option參數,包括:parent,defaultValues
"rows" : {List} 新增的行數組
}
onDataChange(event);——Data數據狀態變化事件,新增后會觸發
event說明:
{
"source" : 組件的js對象,
"options" : 新增時傳入的option參數,包括:parent,defaultValues
"rows" : {List} 新增的行數組
"type" : "new"
}
onNewCreateParam(event);—–BizData事件,業務新增數據創建新增參數事件,可以增加和修改用戶自定義的參數
event說明:
{
"source" : 組件的js對象,
"param" : {Request.ActionParam} 新增參數對象,
"table" : {List[Data.Row]} 新增行的默認值數組 ,數組的長度決定新增行數,數組中的對象是列的默認值
"options" {Object} 新增傳入的參數,如果是tree時可以使用options.parent獲取父行對象
"defaultValues" : {Object} - 新增行的默認值表達式字符串,支持使用Biz的fn函數,如果fName默認值是'abc'那么正確寫法是defaultValues['fName']=justep.Util.toExprString('string','abc'),當table上沒有給出默認值時使用此默認值表達式,建議簡單默認值盡量使用table參數
defaultValues格式:{列名:默認值表達式,...}
}
onNewError(event);———–BizData事件,新增失敗后事件
event說明:
{
"source" : 組件的js對象,
"errorType" : 'server',
"errorNode" : 錯誤信息,
"httpError" : http請求失敗(true/false),
"httpState" : http請求返回碼
}
**3、BizData組件newData和BizServer createAction的關系**
BizData組件是針對BizServer action擴展的Data組件,BizData組件理解BizServer的createAction,onNewCreateParam事件是BizData組件創建準備createAction參數的事件,當擴展了createAction可以通過這個事件進行參數賦值和修改;
下面重點講一講BizData新增默認值;
在BizModel中可以看到createAction有兩個public參數table和defaultValues,table默認值優先級高于defaultValues,也就是說當table中的列沒有賦值時才使用defaultValues默認值;除了action層面的默認值還有概念關系上的默認值,當createAction沒有table和defaultValues默認值時使用概念關系上的默認值,那么整個Biz端新增默認值的優先級就是:
table > defaultValues > 概念上關系默認值 > 關系默認值
有了上面的認識對于BizData的新增默認值就好理解了,首先onNewCreateParam事件中table和defaultValues對應的就是createAction的參數table和defaultValues,默認值優先級就顯而易見了,到這大家可能會問,newData中option參數上的defaultValues和這些默認值又是什么關系?newData中option參數上的defaultValues最終對應的是onNewCreateParam事件中table參數,也就是說newData中option參數上的defaultValues優先級最高
下面給出BizData新增的代碼示例:
//新增兩行數據到最后,并且給出sName和sCode的默認值
var data = this.comp('mainData');
var options = {
defaultValues : [
{sName:'a1',sCode:'b1'},
{sName:'a2',sCode:'b2'}
]
};
data.newData(options);
//使用add新增
var row = data.add({sName:'a1',sCode:'b1'});
data.setRowState(row, Data.STATE.NEW);//設置新增行狀態
**二、刷新**
**1、Data組件數據刷新加載API**
Data.refreshData(option)—-業務數據刷新,會刺激從data級聯刷新,當limit!=-1時取第一頁數據,當limit=-1時取全部數據,當confirmRefresh=true并且數據是編輯或者新增狀態時刷新數據時顯示刷新確認提示框
option參數說明:
{
"onError" : {function} - 失敗回調,function(event),
event的格式:
{
"source" : {Data} - 組件的js對象,
"errorType" : {string} - 'server',
"errorNode" : {object} - 錯誤信息,
"httpError" : {boolean} - 是否http請求失敗,
"httpState" : {string} - http請求返回碼
}
"onSuccess" : {function} - 成功回調,function(event),
event的格式:
{
"source" : {Data} - 組件的js對象
}
}
Data.open()—-加載數據行為和refreshData一致,只是當Data.isLoaded()==false時執行數據加載
Data.loadNextPageData(option)—-加載下一頁的數據,limit!=-1時可以使用
option參數同Data.refreshData(option)option參數
Data.loadAllPageData(option)—-在分頁狀態加載所有數據,limit!=-1時可以使用
option參數同Data.refreshData(option)option參數
Data.loadPageData(pageIndex,option)—-分頁模式下加載第N頁數據,參數pageIndex指定需要加載的頁,limit!=-1時可以使用
option參數同Data.refreshData(option)option參數
Data.loadData(data,append,parent,index)—-加載數據到Data
data:{Json Object} 必須參數,需要加載的Json數據,格式同biz層序列化格式,即包含rows數組的數據
append:{Boolean} 數據增加模式 true/false
parent:{Data.Row} 樹形數據時增加數據的父,為null時數據加載到根下
index:{Integer} 加載數據的插入位置,缺省數據插入到末尾
//通過loadData給data增量載入數據
var data = this.comp('mainData');
data.loadData({
rows:[
{fName:'小李',fAge:25},
{fName:'小王',fAge:28},
{fName:'小張',fAge:20}
]
},true);
和刷新數據相關還有兩個屬性:confirmRefresh、confirmRefreshText,當confirmRefresh==true并且data處于修改狀態時刷新data將彈出confirmRefreshText提示,取消后將不進行刷新動作
**2、Data組件數據刷新相關事件**
onBeforeRefresh(event)——-刷新前,可以通過event.cancel=true終止刷新動作
event說明:
{
"source" : 組件的js對象,
"options" : 刷新給入的參數
"cancel" : 可修改,設置為true后中斷當前刷新動作
}
onCustomRefresh(event)——-業務數據刷新接管,完全接管刷新動作
event說明:
{
"source" : 組件的js對象,
"cancel" : 可修改,設置為true后中斷當前刷新動作,
"limit" : 頁大小,
"offset" : 偏移,
"options" : 刷新給入的參數
}
onAfterRefresh(event)——-業務數據刷新后
event說明:
{
"source" : 組件的js對象
"limit" : 頁大小,
"offset" : 偏移,
"options" : 刷新給入的參數
"success" : 是否成功刷新
}
onDataChange(event);——Data數據狀態變化事件,刷新后會觸發
event說明:
{
"source" : 組件的js對象
"limit" : 頁大小,
"offset" : 偏移,
"options" : 刷新給入的參數
"success" : 是否成功刷新
}
onRefreshCreateParam(event)——-BizData事件,業務刷新數據創建刷新參數事件,可以增加和修改用戶自定義的參數
event說明:
{
"source" : 組件的js對象,
"limit" : 頁大小,
"offset" : 偏移,
"options" : 刷新給入的參數
"success" : 是否成功刷新
"type" : "refresh"
}
onRefreshError(event)——-BizData事件,業務刷新數據失敗后事件
event說明:
{
"source" : 組件的js對象,
"options" {Object} 新增傳入的參數,如果是tree時可以使用options.parent獲取父行對象
"param" : {Request.ActionParam} 刷新參數對象
"offset" : 取數據的偏移
"limit" : 取數據的條數
}
**3、BizData組件數據刷新和BizServer queryAction的關系**
同樣BizData組件理解BizServer的queryAction,BizData組件的數據刷新是通過BizServer的queryAction返回數據的,onRefreshCreateParam事件同樣可以用于適配不同的queryAction進行參數的增減,在Data組件上offset、limit屬性有著比較重要的地位,這兩個參數直接對應后臺的queryAction的offset、limit參數,limit指一頁數據取多少條,offset指從第幾條開始取數據,所有的刷新數據API都和offset、limit屬性有關,使用分頁相關刷新API時,limit必須大于0。(這里簡單提一下Data組件,Data組件雖然沒有實現后端取數據邏輯,但是通過onCustomRefresh事件能同樣實現對應queryAction的數據查詢)
**三、保存**
**1、Data組件數據保存API**
Data.saveData(option)——-業務數據保存方法,向后端提交修改的數據,包括從Data數據
option參數說明:
{
"onError" : {function} - 失敗回調,function(event),
event的格式:
{
"source" : {Data} - 組件的js對象,
"errorType" : {string} - 'server',
"errorNode" : {object} - 錯誤信息,
"httpError" : {boolean} - 是否http請求失敗,
"httpState" : {string} - http請求返回碼
}
"onSuccess" : {function} - 成功回調,function(event),
event的格式:
{
"source" : {XData} - 組件的js對象
}
"ignoreInvalid" : {boolean} - 保存時忽略有效性校驗,默認false
}
**2、Data組件數據保存事件**
onBeforeSave(event)——-業務數據保存前,事件在批事務啟動后觸發,寫在這個事件里的biz action請求將在一個批操作完成
event說明:
{
"source" : 組件的js對象,
"cancel" : 可修改,設置為true后中斷當前保存動作
}
onCustomSave(event)——-業務數據保存接管,完全接管保存動作
event說明:
{
"source" : 組件的js對象,
"cancel" : 可修改,設置為true后中斷當前保存動作
"options" : 保存時給入的參數
}
onAfterSave(event)——-業務數據保存后,事件在批事務啟動后觸發,寫在這個事件里的biz action請求將在一個批操作完成
event說明:
{
"source":組件的js對象,
"cancel" : 可修改,設置為true后可中斷當前批操作中的所有保存
"options" : 保存時給入的參數
}
onSaveCommit(event)——-業務數據保存事務提交后,數據提交成功,BizData組件是BizServer保存成功后觸發,Data組件是開發者保存提交成功后通過API Data.applyUpdates()刺激觸發
event說明:
{
"source" : 組件的js對象
}
onSaveCreateParam(event)——-BizData事件,業務數據保存創建保存參數事件,可以增加和修改用戶自定義的參數
event說明:
{
"source" : 組件的js對象,
"param" : {Request.ActionParam} 保存參數對象
}
onSaveError(event)——-BizData事件,業務保存失敗后事件
event說明:
{
"source" : 組件的js對象,
"errorType" : 'server',
"errorNode" : 錯誤信息,
"httpError" : http請求失敗(true/false),
"httpState" : http請求返回碼
}
**3、BizData組件數據保存**
BizData組件數據保存時主從所有的data在一個批事務請求中,提交到BizServer saveAction保存的數據只包含修改的數據(新增、刪除,修改),saveAction成功返回后會主動調用Data.applyUpdates()進行數據狀態的修改,當然同樣規則可以通過onSaveCreateParam事件進行saveAction的擴展。
BizData保存更新模式屬性updateMode,它定義了BizData數據的更新模式,下面結合此屬性講講基于BizData的數據保存原理, 解決數據更新沖突平臺采用樂觀鎖實現,簡單說就是多個人同時更新一條數據時只會一個更新成功;平臺中更新模式有兩種:whereVersion,whereAll,其實還可以增加whereKey(目前沒有實現),whereVersion更新數據時使用key和version作為條件更新,使用data的save時平臺會自動維護version,也就是說在更新語句中會做version+1,當version變化時說明數據已經被人修改,當前更新失敗回滾,whereAll模式使用所有查詢列的舊值做更新的條件,當條件不滿足就說明數據已經被人修改,當前更新失敗回滾。從數據嚴格性上說:whereKey<whereVersion<whereAll,平臺BizData默認使用whereVersion
**四、刪除**
Data組件刪除根據directDeleteMode屬性分為立即刪除和跟隨saveData刪除,directDeleteMode==true時BizData直接請求BizServer saveAction進行數據刪除,directDeleteMode!=true時deleteData只是把數據放入data的刪除隊列,直到saveData時才一起提交所有修改數據,也就是說BizData組件的刪除都是使用BizServer saveAction實現。
**1、Data組件刪除API**
Data.deleteData(rows)
Data.deleteAllData()
**2、Data組件刪除事件**
onBeforeDelete(event)——-業務數據刪除前
event說明:
{
"source" : 組件的js對象,
"cancel" : 可修改,設置為true后中斷當前delete動作,
"deleteRows" : 刪除的行數組
}
onCustomDelete(event)——-業務數據刪除接管,完全接管delete動作
event說明:
{
"source" : 組件的js對象,
"cancel" : 可修改,設置為true后中斷當前delete動作,
"deleteRows" : 刪除的行數組
}
onAfterDelete(event)——-業務數據刪除后
event說明:
{
"source" : 組件的js對象,
"deleteRows" : 刪除的行數組
}
onDeleteError(event)——-BizData組件事件,刪除提交失敗后事件
event說明:
{
"source" : 組件的js對象,
"errorType" : 'server',
"errorNode" : 錯誤信息,
"httpError" : http請求失敗(true/false),
"httpState" : http請求返回碼
}
**五、數據狀態**
Data組件的數據狀態包括data狀態、Row狀態、Cell狀態;
data狀態指Data數據是否加載數據,通過Data.isLoaded()獲取,這個狀態在Data.refreshData、Data.newData等加載數據API執行后狀態變更成true;
Row狀態指行數據狀態,包含:Data.STATE.NEW、Data.STATE.DELETE、Data.STATE.EDIT、Data.STATE.NONE,數據新增、刪除、修改后行狀態變更,然后在執行Data.saveData后通過Data.applyUpdates()更新行狀態為Data.STATE.NONE(BizData會自動調用Data.applyUpdates());
Cell狀態指列上的修改狀態,當數據修改后列上changed變更為true,同Row的狀態邏輯Data.saveData后變更為false;
相關API:
Data.getRowState(row)—-獲取行狀態,參數row給出要獲取狀態的行對象
Data.setRowState(row,state)—-修改行狀態,row:行對象,state:行狀態,注:不能設置delete狀態,使用deleteData函數實現
Data.isChanged()—-判斷是否有數據修改
**六、數據序列化**
把Data的數據進行序列化提供了API:
Data.toJson(changed,excludeCalculateCol)——-data的json格式序列化對象,changed參數=true,只序列化data的變化行數據,excludeCalculateCol參數=true,排除data定義計算列
- 快速入門
- 第一個應用
- 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