数值和字符串的传递
之前我们在介绍链接控件的时候,提到了链接参数的传递。例如,编辑列表中的一条记录,把列表页记录的id传递给子页面,配置过程是这样的:
-
在列表页链接控件的控件属性中,添加一个参数,参数名为
it_id,参数值为ds.id。
-
在编辑页的页面数据里添加参数,参数名称为
it_id,参数类型为整数。
-
在编辑页的页面数据里,it变量的过滤条件设置为
table.用户.id == @it_id。
注意:1和2中的参数名可以任意改,但必须完全相同;1的参数值和2的参数类型要对应;3中的@it_id必须要加“@”符号。
各个变量的使用时机配置,一般父页面的是front,子页面的是back,设置如果不对,参数传递不过去,容易出现错误。
目前参数传递只支持整数和字符串的传递,其他如List、数组、Map都必须先转化为字符串(用toString()函数),传过去以后再解析回原类型(用parse()函数)。
Map参数的传递
Map数据类型是形如这样的,mymap={key1:value1,key2:value2,key3:value3,...},使用的时候用mymap.get(key2)就能获得value2。其特点是key1、key2、key3...必须不能有重的,而value1、value2、value3...等可以相同。如sex={1:"男",2:"女"},用sex.get(2)就能得到"女"。
例如在列表页选购完商品,要传递购买商品的品名和数量给子页面,则可以将传递的数据设置成Map类型,其中购买商品的名称为key,购买商品的数量为value,配置过程如下:
-
在列表页建立一个变量
amap,数据类型是键值对,使用时机是front,初始化函数是Map.parse(@amap),取值一激活,函数为Map.parse(@amap).putAll(Map.createByCells("D2","E2",dynamic(E2)).trimValue())
-
在列表页链接控件的控件属性中,添加一个参数,参数名为
pmap,参数值为amap.toJson()。
-
在子页面的页面数据里添加参数,参数名称为
pmap,参数类型为字符串。
-
在子页面的页面数据里,添加变量
bmap,变量类型是键值对,使用时机是back,初始化函数是Map.parse(@pmap)。
-
在子页面的页面数据里,添加变量
map数据集,使用时机是back,变量类型是数据集,泛型为Other,初始化函数为DataSet.parse(bmap)。
-
在子页面的单元格中,使用
=map数据集.select(map数据集.id),=map数据集.name,=map数据集.value来展示传递过来的数据。其中数量列也可以用=bmap.get(C3)来获得。
初始化函数的
Map.parse(@amap)的作用是当列表有多页时,点击下一页后,前页的选择依然有效。否则,第1页的选择完了以后,浏览第2页,第1页的选择就作废了。
需要注意的是,使用名称作为key时,名称不能有重复的,如果有重复的,系统会自动去重。如果需要有重复的,可以用id作为key,因为id肯定不会重复。如果数量的值未填,即值为null,则系统不会将这个key-value编入Map中。
多个Map参数的传递
当需要传递品名、数量、单价等三类信息时,可以使用两个Map参数传输。其中一个Map的key是品名,value是数量,另一个Map的key是品名,value是单价。在父页面的链接按钮控件属性上添加两个参数,在子页面设置两个变量分别接收参数。其他过程与1个Map参数的传递一样。
需要说明的是,多个Map参数传递后展示时,使用第一个map数据集扩展成多行,第二个map数据集value使用第一个map数据集的key来获得。如map数据集1是名称和单价,map数据集2是名称和数量,则id列写=map数据集1.select(map数据集1.id),名称列写=map数据集1.name,单价列写=map数据集1.value,数量列写=map数据集2.get(map数据集1.name)。重点注意数量列的写法。












网友评论