问题现象
手机页面(TUnimForm)上增加多个TUnimRadio单选项(非主页面上),其中一个TUnimRadio为默认选中(或在显示这个子页面时进行初始化显示某个TUnimRadio选中)。当第一次显示这个页面的时候,页面上的TUnimRadio不会出现有选中项。第一次显示完成之后,再次刷新选中项才会有效。
跟踪运行情况
发现,对应的子页面在创建时,WEB端并不会生成出显示内容,只会在show完成时,才会通过HandleEvent将需要的控件信息及数据发送到前面,再通过前端自动生成控件完成显示,例如TUnimRadio的创建内容是
OE5=new Ext.field.Radio({id:"OE5_id",docked:"top",name:"Radio_UnimPanel6_FormLearn",enableKeyEvents:true,tabIndex:144,disabled:true,margin:"10px 10px 0px 10px",height:"auto;",label:"UnimRadio1",labelAlign:"right",labelWidth:"92%"});OE5.nm="OE5";_cdo_("UnimRadio1",OE5,null,FormLearn);
在这个数据项内,实际是包括了该项是否为选中的,但在实际创建时却并没有根据其标识来设置控件是否选中。所以这里应该是一个BUG。
解决方法
首先,根本上解决理论上应该是修改JS代码,ext-modern-all.js里包括了创建TUnimRadio的过程(这是创建TUnimRadio的一部分JS代码):
但是修改JS相对复杂一些。所以这里就不介绍了。
其次,可以在子页面上增加一个UnimTimer1控件来解决(这是取巧的方式)。在页面增加UnimTimer1,设置interval时间为50毫秒,RunOnce为true(只执行一次)
最后在OnTimer事件中重新设置一次选中项。
执行结果会是,当页面显示完成后,会马上再调用一次设置,从而更新页面上的选中项。