一、新增
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" : 是否成功刷新
		"type" : "refresh"
	}

onRefreshCreateParam(event)——-BizData事件,业务刷新数据创建刷新参数事件,可以增加和修改用户自定义的参数
event说明:

	{
		"source" : 组件的js对象,
		"options" {Object} 新增传入的参数,如果是tree时可以使用options.parent获取父行对象
		"param" : {Request.ActionParam} 刷新参数对象
		"offset" : 取数据的偏移
		"limit" : 取数据的条数
	}

onRefreshError(event)——-BizData事件,业务刷新数据失败后事件
event说明:

	{
		"source" : 组件的js对象,
		"errorType" : 'server',
		"errorNode" : 错误信息,
		"httpError" : http请求失败(true/false),
		"httpState" : http请求返回码
	}

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定义计算列

 

上一篇 Data组件基础02

下一篇 Data组件基础04

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

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