查看: 1058|回复: 7

elselect下拉框组件 脚本发起表查询 选项无数据

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-10-19 16:00:44 来自手机 | 显示全部楼层 |阅读模式
var json = this.form.get("elselect").json;
json.options = [
    {"label":"1","value":"1"},
    {"label":"2","value":"2"}
];

oa版本8.2.3。我参照论坛提供的这个下拉框数据格式,下拉框组件赋值选用脚本

先let a  = [{“label”:“收件箱”,“value”:““}]
然后再写table.listrowselect表查询拿到数据,并push进a,打印a出来是已有成功添加的值的

但是我最后return a,出来的只有原始a定义的收件箱选项,而表查询的选项没有添加进下拉框

并且当我尝试对return a写了settimeout后,下拉框就彻底变成“无数据”了



为什么?难道是因为可选值脚本返回数据时间>组件加载时间?逻辑难道不应该是必须保证可选值脚本异步加载数据完再加载组件吗?

我的需求是:必须在表查询出来的数据之外还再添加一个原始选项,请问该怎么办到?
我试过可选项选用“查询”配置,然后在postload事件中对json.options进行添加,能成功添加选项,但是我选中这个选项时竟然触发不了change事件,无奈才想选用“脚本”配置自己重写一个,但现在发现也不行
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2024-10-21 10:22:54 | 显示全部楼层

直接在这里写脚本返回数组就好了,用不到label,value这些,如果label和value不同就返回return ["aa|11","bb|22"];

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-10-21 19:32:55 来自手机 | 显示全部楼层
论坛管理员 发表于 2024-10-21 10:22
直接在这里写脚本返回数组就好了,用不到label,value这些,如果label和value不同就返回return ["aa|11"," ...

我就是选用可选值脚本。我的意思是脚本里进行table.list表查询得到的选项明明已经添加到返回数组里了,但是最后实际下拉框却没有出现表查询的选项。是否是由于异步的原因?我该怎么让表查询出来的选项+原始定义的固定选项一起出现?
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2024-10-23 09:43:06 | 显示全部楼层
可是您上面描述的,返回的格式跟我给您的不一样啊

var json = this.form.get("elselect").json;
json.options = [
    {"label":"1","value":"1"},
    {"label":"2","value":"2"}
];

我给的return ["aa|11","bb|22"];
您最好是截图出来看看,您具体是怎么写的
回复

使用道具 举报

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-10-23 16:02:46 | 显示全部楼层
论坛管理员 发表于 2024-10-23 09:43
可是您上面描述的,返回的格式跟我给您的不一样啊

var json = this.form.get("elselect").json;

之前是像图片这样写的,昨天也有试过按你新给出的方法["aa|11","bb|22"]写:
items.forEach(item => {
    json.options.push(item.name + '|' + item.id);
});

都能正常打印出返回数组(已经完整包括原始定义的“收件箱”选项和表查询后新加的选项),但是下拉框显示的时候却只显示了“收件箱”选项,所以我才怀疑是不是异步导致的


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2024-10-24 13:13:43 | 显示全部楼层
所以才要您把完整的代码截图出来,您的重点并不在于里面的循环,而在于您外部的table.listRowSelect
默认它是异步的,最后有一个参数指定是否要异步
参考:http://域名/api/module-Table.html#listRowNext

下次再提问一定把涉及到的代码,错误,需求描述等描述清楚,配上全面一点的截图,这样能更好的定位问题,也给您节省时间哈
回复

使用道具 举报

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-10-25 10:57:18 | 显示全部楼层
论坛管理员 发表于 2024-10-24 13:13
所以才要您把完整的代码截图出来,您的重点并不在于里面的循环,而在于您外部的table.listRowSelect
默认它 ...

谢谢,改成同步参数就解决了


但是还存在另一个问题:
原本我们下拉框选项选用固定值方式时,即使可选值只有一个选项,下拉框默认显示选项是空值,下拉框展开第一个选项也是空值
但是现在采用脚本做选项的方式后,下拉框默认显示选项是“收件箱”了,我尝试在原代码上加了个空值选项:let a = [{"label":"","value":""},{"label":"收件箱","value":""}],但是这样写后出来下拉框默认显示选项依然是“收件箱”,只是下拉框展开第一个选项是空值而已。并且我点击“空值”和“收件箱”选项均不会触发change事件,而点击其他选项(表查询出来的)都是正常能触发的,为什么呢?我该如何解决?

想要像固定值一样:下拉框默认显示选项是空值,下拉框展开第一个选项也是空值,然后各选项都可以正常触发change事件
回复

使用道具 举报

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-10-29 09:07:48 来自手机 | 显示全部楼层
论坛管理员 发表于 2024-10-24 13:13
所以才要您把完整的代码截图出来,您的重点并不在于里面的循环,而在于您外部的table.listRowSelect
默认它 ...

dd,评论还有一个问题求回复
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系客服 关注微信 下载APP 返回顶部 返回列表
viewthread