场景:分录中字段为一个文本类型,但这个字段的值必须是从某个基础资料或者已有业务单据中选择出来。这个时候,分录表格中字段对应的列编辑器采用的是f7实现步奏:(1) 对分录改列设置为f7类型:有两种方式:1, js页面初始化或者新增行事件设置:表格setColumnConfig方法或者changeCellConfig方法,具体参照上一篇“动态设置单元格的编辑器类型”
2, 在配置工具中添加一个f7控件,然后绑定改字段,*不要配置该字段,通过配置字段选出来的控件在工具中是无法修改控件类型的,所以是先添加控件
(2) 保存之前将修改字段值类型因为字段是一个文本类型,如果直接保存的话,此时分录表格取到的改字段类型时一个object,传递到后台保存会报错类型不匹配。复写框架保存方法,在保存之前修改model改字段类型:一下部分代码,[table]
[tr][td=711]
[tr][td] var model = page.getCurrentModel(); $.each(model.reduceLevelEntry,function(index,obj){ if(obj.reduceReason!=null&&typeof obj.reduceReason =="object"){ obj.reduceReason = waf.wafutil.getMultiValue(obj.reduceReason.name);//保存扣分原因 } });
(3) 当f7编辑器被点击时模拟一个f7值类型前两步奏已经能够实现分录保存功能,但保存之后进入编辑页面时,分录单元格上保存的值依然是一个字符串,如果此时直接点击会马上消失,造成数据丢失,所以此时需要在创建编辑器后模拟一个f7对象给编辑器f7注册一个onfocus事件,当获得焦点时如果input上的值为空则表明当前单元格上的值是字符串,然后构造一个假的f7对象赋值给f7代码如下:
[table]
[tr][td=790]
[tr][td] var options={ formatter:"f7", edittype:"f7", editoptions:{ subWidgetName: "wafPromptStandard", isMulti:false, f7Json:{ displayFormat:"{name}", onfocus :function(event){ if(event.target.value==null||event.target.value==""){ //第二次加载时单元格值为字符串,点击编辑器后为null var title = $(event.target).closest("td").attr("title");//title上依然保留上一次的文本值 if(title!=null||title!=""){//模拟一个f7对象 var value ={id:"123456",name:{l1: null,l2: title,l3: null},number:"7890123"}; $(event.target).wafPromptBox("setValue",value); } } } }, subTagJson:{
breakLine: false, isMulti:false, query:queryPk, filteritem:filteritem, title:title } } };