4.7 开发技巧:模板开发

2019-04-08  本文已影响0人  MisShop智能开发平台

MisShop中建立页面所使用的模板,可以根据需要自己开发和修改。模板开发,跟页面类似,主要不同在于参数不一样,计算结果是设计器里的页面,而页面的计算结果才是网页。

创建模板时,单击导航区按钮模板,进入模板导航树,工作区和页面的工作区一样,都是在单元格中布置元素。

模板设计时的添加、删除、使用控件、布局等编辑功能与页面开发一致,相当于做一个通用的页面。

模板页面数据中,有@tl_table参数,表示这个模板生成页面时,页面对应数据表的表名。在设计页面的添加页面时,选择了页面对应数据表,就自动把这个参数传到了页面。

参数中,以tl_ 开头的参数,只在模板里使用,生成页面的时候,这个变量就没有了。所以,在模板里 tl_ 开头的参数,都要用公式将它变成值,才能在设计器页面里显示,或者需要在添加页面的时候,手动设置,然后传输给模板,模板再以此生成页面。其他名称的变量,在生成页面时都能够保留。

我们来看看平台默认提供的列表模板,是怎么样配置的。

  1. 模板数据配置。在模板的数据变量配置中,能看到tl_queryds变量和 tl_selectds变量。
    其中,tl_queryds的初始化函数是:DataSet.parse(tl.getTableInfo(@tl_table, Constant.template.query_cols)),表示在对应的表中,根据查询字段分组,找到的字段名、字段类型等表结构信息,tl_queryds.value就表示字段名。
    tl_selectds的初始化函数是:DataSet.parse(tl.getTableInfo(@tl_table, Constant.template.list_cols).removeValue(tl.getTableDispColumn(@tl_table)).subList(3)),表示根据列表字段分组查找到的表结构,包含字段名等信息。
    其他变量如dscheckedme等数据变量,跟页面中的一样。ds的泛型是template,在生成页面时会改变成页面对应的数据表。

  2. 功能区
    靠页面顶端主要是功能按钮,A1格的 =" " +@tl_table+"列表",在页面中会变成如= 用户列表,样式中设置为粗体,在最终效果中会显示这页的标题。B1格的增加、C1格的批量删除、D1格的导入、K1格的导出、L1格的折叠与展开,都是对应的控件,配置与页面中类似。

  3. 查询区
    查询区显示了查询单表单和查询按钮。
    A1格中的 =tl_queryds.select(`tl_queryds.value`,,,,,,,3),表示按照字段名扩展,每3个为一组,这个格显示第一个。即每行显示3个,超过3个的往下换一行继续显示。系统取值时会3个同时取出来,后边的再根据偏差到这个里面取值。
    B1格的=ifv(tl_queryds.value!=null,"=query.ds."+tl_queryds.value,""),表示如果 tl_queryds.value的结果不为空,则把这个格子的值设置为=query.ds.字段名,在最终页面中就会显示为输入查询条件的输入框。
    后面的D2、G2格的=dsoff(tl_queryds.value,1)=dsoff(tl_queryds.value,2),表示获得这个字段分组中下一个字段名。
    后面的E2、H2格的=ifv(dsoff(tl_queryds.value,1)!=null,"=query.ds."+dsoff(tl_queryds.value,1),"")=ifv(dsoff(tl_queryds.value,2)!=null,"=query.ds."+dsoff(tl_queryds.value,2),"")表示设置这个格子的值为相应的=query.ds.字段名。其中,高级属性中上主格都设置为A2,表示随A2而变。
    列可以为空表示这一列有内容时,右边的单元格向右偏移。横向侵占表示这一列有内容时,把右侧的单元格占领。
    第三行的查询按钮与页面一样,启动查询。

  4. 列表区
    列表区以表格形式显示数据表中的记录。其中第四行是显示表格的标题,第五行是显示数据。
    A4格是id,是固定值,在设计器页面和浏览器页面都显示一样的。
    A5格值="=ds.select(ds.id)"是固定的,用于生成扩展显示每个记录id的公式=ds.select(ds.id)
    B4格是全选框,B5格是复选框,都是跟checked变量绑定。
    C4格=tl.getTableDispColumn(@tl_table)是显示数据表的显示字段的字段名,默认是名称字段,C5格="=ds."+tl.getTableDispColumn(@tl_table)是生成显示名称字段数据的公式。
    D4格=tl_selectds.select(tl_selectds.value)是显示数据表字段名,D5格是=ifv(tl_selectds.value!=null,"=ds."+tl_selectds.value,"")显示其他字段的数据。此时注意tl_selectds变量的定义中已经移除掉了名称字段,所以D4格不会显示,而D3格我们手动加上了名称字段。D4单元格高级属性为横向侵占,表示D4单元格的公式出来几个字段就向右方侵占多少个格子,而J4、J5单元格的高级属性中有个占位属性设置为列可以为空,表示扩展到这的时候,这个格会不断复制,向右推移,而如果列的所有单元格值都为空,则这一列将被删掉。
    同时,C5、K5单元格控件属性为链接,点击会跳转到详情页面,链接的控件属性中,链接目标也是模板,传递参数ds.id是固定值。L5单元格控件属性为删除数据,点击后会删除该行数据。
    在C4、C5基本属性的格名一栏公式为tl.calcStaticProperty("head_ds."+tl_selectds.value)tl.calcStaticProperty("ds."+tl_selectds.value),表示在生成页面的格名属性中,设置静态值为ds.字段名。如果公式为tl.calcExp("ds."+tl_selectds.value),生成的值会放在格名属性的公式一列,会在页面生成网页时动态计算。格名是代表这个单元格,例如目前常用A3、C5表示这个单元格,以后也可以用格名表示单元格,格名的功能暂时未用。

  5. 分页控件
    第六行是一个分页控件,用于对表格中的数据分页显示。

编辑模板与列表模板类似,定义了tl_fieldstl_longfields变量集,获得数据表的字段名。其中tl_fields定义是DataSet.parse(AuxTable.getCols(@tl_table,[Constant.subtype.shorttext,Constant.subtype.password,Constant.type.number,Constant.type.date,Constant.type.logic,Constant.type.selection,Constant.type.reference,Constant.type.attachment]).removeAll(["id","wx_openid","mis_valid"])),表示获得大部分字段的字段名。

tl_longfields定义为DataSet.parse(AuxTable.getCols(@tl_table,[Constant.subtype.longtext,Constant.subtype.html])),表示获得字段类型为长文本或html的字段名。

上一篇 下一篇

猜你喜欢

热点阅读