2022-04-14 帆软 _g()和this.options.form获取控件、控件值的区别

本文探讨了在帆软软件中,使用_g()和this.options.form方法获取控件及控件值时遇到的问题。在即时执行JS代码时可能无法获取到正确的值,需要延时处理。作者通过示例代码展示了这两种方法在切换tab时控制控件值的变化,指出前者可能导致值不变或报错,而后者修正后能正常工作。总结指出,_g()适用于获取控件,而获取控件值建议使用this.options.form,并且在某些情况下可能需要延时处理以确保获取最新值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般来说,获取控件相关的值的时候,如果马上执行js代码,经常会获取不到,但是如果加一个延时setTimeout就可以获取到准确的值。
今天发现一个问题,代码如下

//延时执行以下代码
setTimeout(function() {
	//获取当前tab条的的数字,0表示tab1,1表示tab2
  	var index=_g().getWidgetByName("tabpane0").getShowIndex();
  	//获取需要存储值的控件
 	var label=this.options.form.getWidgetByName("textEditor0");
 	//将需要存储值的控件的值设置为0+tab条的值,默认为0
	label.setValue(0+index,true);
}, 10);

或者

//获取当前tab条的的数字,0表示tab1,1表示tab2
var index=_g().getWidgetByName("tabpane0").getShowIndex();
//获取需要存储值的控件
var label=this.options.form.getWidgetByName("textEditor0");
//延时执行以下代码
setTimeout(function() { 
	//将需要存储值的控件的值设置为0+tab条的值,默认为0
  	label.setValue(0+index,true);
}, 10);

这样的代码本来需要实现的效果是,切换到tab1时,控件值为0,切换到tab2时,控件值为1,以此类推。
但是发现实际情况中,前者的情况是无论怎么切换tab,控件的值都没改变。后者的情况是虽然改变了,但是一直有明显的报错提示var index=_g().getWidgetByName("tabpane0").getShowIndex();这行代码有问题。
请教别人后,代码修改为

//延时执行以下代码
setTimeout(function() {
	//获取当前tab条的的数字,0表示tab1,1表示tab2
  	var label=_g().getWidgetByName("textEditor0");
  	//获取需要存储值的控件
  	var index=_g().getWidgetByName("tabpane0").getShowIndex();
  	//将需要存储值的控件的值设置为0+tab条的值,默认为0
  	label.setValue(0+index,true);
}, 10);

或者

//获取需要存储值的控件
var label = this.options.form.getWidgetByName("textEditor0");
//延时执行以下代码
setTimeout(function() {
	//获取当前tab条的的数字,0表示tab1,1表示tab2
    var index = _g().getWidgetByName("tabpane0").getShowIndex();
    //将需要存储值的控件的值设置为0+tab条的值,默认为0
    label.setValue(0 + index, true);
}, 10);

这样就没有任何问题了。
我发现实践中,获取控件一般是没什么问题的,但是获取和控件有关的值经常会有问题,需要使用延时才能获取正确的值。
setTimeout是一个独立的方法体,在里面使用this.options.form,就会获取不到控件。如果需要在setTimeout里获取控件,就得用_g()。所以,this.options.form需要放在外面才能正确获取控件。
_g()获取控件值,就可以放在setTimeout里使用。获取值的时候若不延时,会导致值变化的不如取数快,取的数通常不对,所以需要放在setTimeout里才能正确获得控件的值。
因此,在setTimeout里获取值用_g(),在外面获取则用this.options.form

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值