Foxtable(狐表)用户栏目Web开发 → [求助]请问如何给表头的编辑器动态设置属性?


  共有287人关注过本帖树形打印复制链接

主题:[求助]请问如何给表头的编辑器动态设置属性?

帅哥哟,离线,有人找我吗?
libo8284
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:72 积分:586 威望:0 精华:0 注册:2020/5/8 22:46:00
[求助]请问如何给表头的编辑器动态设置属性?  发帖心情 Post By:2020/6/17 11:26:00 [只看该作者]

周老师好,请教一下

我以订单系统—》数据输入—》表格式输入,为样板,做了一个工作安排表,如下面截图所示:


图片点击可在新窗口打开查看此主题相关图片如下:表格编辑器属性动态修改-1.png
图片点击可在新窗口打开查看

我增加了两个下拉框,分别是“项目”、“子项”,有点类似“省市联动下拉框”

初始加载时,数据为空,当我选择项目,则子项下拉框里,就动态修改为所选项目对应的子项

然后,当我选择子项,就会根据所选子项,动态加载数据

我现在的问题是:

1)“责任人”这一列,在index.js里设置了下拉框属性,代码如下,其中加载条件(tj)是:项目编号在初始的项目编号列表里(xmlist):

$.extend(data[0][6],{      //给表头中的第7个列对象(责任人)重新设置编辑器属性
editor:{
type:'combobox',
options:{
url:'dataListWy',
queryParams:{
tablename:'JH_项目成员',
cols:'名称',
tj:"项目编号 in (" + xmlist + ")"
},
required:true,
textField:'名称',
valueField:'名称',
panelHeight:160,
panelWidth:150
}
}
});

2)“项目”、“子项”下拉框,是在page1.js里定义的,其中项目的id,也是在上面所说的,初始项目列表(xmlist)中,代码如下:

    $('#xmbox1').combobox({            
url:'dataListTj',
queryParams:{
tablename:'JH_项目清单',
cols:'_Identify,名称',
tj:"_Identify in (" + xmlist + ")"
},
required:true,
textField:'名称',
valueField:'_Identify',
width:170,                    
panelHeight:200,              
editable:false,
onClick:function(record){
//debugger;
$('#zxbox1').combobox('options').queryParams = {
tablename:'JH_子项清单',
cols:'_Identify,名称',
tj:"项目编号='" + record._Identify + "'"
};
$('#zxbox1').combobox('clear').combobox('reload');
}
    });

3)我现在想要实现,当我在项目下拉框里选择具体的项目,然后表格中的“责任人”那一列的加载条件,就动态修改。

请问该如何做?谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
libo8284
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:72 积分:586 威望:0 精华:0 注册:2020/5/8 22:46:00
  发帖心情 Post By:2020/6/17 11:49:00 [只看该作者]

我试了一下,动态修改项目列表(xmlist1,新建的,初始赋值为xmlist),然后再reload,#table1,发现没有起作用,代码如下:

    $('#xmbox1').combobox({            
url:'dataListTj',
queryParams:{
tablename:'JH_项目清单',
cols:'_Identify,名称',
tj:"_Identify in (" + xmlist + ")"
},
required:true,
textField:'名称',
valueField:'_Identify',
width:170,                    
panelHeight:200,              
editable:false,
onClick:function(record){
//debugger;
$('#zxbox1').combobox('options').queryParams = {
tablename:'JH_子项清单',
cols:'_Identify,名称',
tj:"项目编号='" + record._Identify + "'"
};
$('#zxbox1').combobox('clear').combobox('reload');
xmlist1.length = 0;
xmlist1.push(record._Identify);
//$('#table1').datagrid('clear').datagrid('reload');
//debugger;
}
    });

是不是应该reload一下表头?

 回到顶部
帅哥哟,离线,有人找我吗?
reachtone
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:版主 帖子:2098 积分:17572 威望:0 精华:19 注册:2008/9/2 10:09:00
  发帖心情 Post By:2020/6/17 13:56:00 [只看该作者]

你上面的代码,使用的是datagrid里的reload,即使重载成功的话,也只是重载表格中的数据。

而你现在要根据xmbox1中的值动态更改表格中的“责任人”列表项,这个确实会稍微麻烦一点。因为,这个“责任人”是个combobox,只能使用combobox中的reload方法来重载;更重要的一点在于,这个责任人combobox不是一个固定的页面元素,它是动态的,它会随着你选择的数据行不同,而出现不同的comboxbox。

所以,要实现你的目的,请按以下思路处理:

第一,获取表格中当前用到的“责任人combobox”编辑器。
这要用到datagrid中的getEditor方法,请参考攻略中的datagrid单击、双击及编辑事件,这里有很详细的例子。

第二,在xmbox1的单击事件中,给这个获取到的“责任人combobox”编辑器重新设置queryParams属性,并执行重载。或者不重置queryParams属性,在reload时指定新的请求参数即可。这个可参考省市联动示例。

 回到顶部
帅哥哟,离线,有人找我吗?
libo8284
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:72 积分:586 威望:0 精华:0 注册:2020/5/8 22:46:00
  发帖心情 Post By:2020/6/17 14:12:00 [只看该作者]

收到,谢谢周老师指点!

 回到顶部
帅哥哟,离线,有人找我吗?
libo8284
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:72 积分:586 威望:0 精华:0 注册:2020/5/8 22:46:00
  发帖心情 Post By:2020/6/17 16:18:00 [只看该作者]

请问周老师,我刚刚试了,没有成功。

我看攻略,getEditor是在编辑表的时候,而且,只有 单击单元格,或者双击单元格的时候,才能使用

而我这个具体的情况,datagrid初始是没有加载数据的,也就是没有单元格供我选择的

等我选择了项目、子项之后,datagrid才会加载数据,这时可以用getEditor方法,我点不同的单元格,会得到不同的编辑器

但是,我的目标,是“责任人”所在的编辑器,而不是随机的

可能是我前面没有描述清楚问题,我感觉getEditor方法不适用于我这种情况。

请周老师指导一下,看看我的思路是否有误。

 回到顶部
帅哥哟,离线,有人找我吗?
libo8284
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:72 积分:586 威望:0 精华:0 注册:2020/5/8 22:46:00
  发帖心情 Post By:2020/6/17 16:27:00 [只看该作者]

原始的生成数据表的代码如下,我看了一下,是依据index.js里得到的tablerwTitles数组来生成表头

所以,我尝试去修改tablerwTitles里,“责任人”列所对应的queryParams,但是,这个不起作用,因为datagrid的reload,只是重新加载数据,表头不会修改。

麻烦周老师指导一下


图片点击可在新窗口打开查看此主题相关图片如下:表格编辑器属性动态修改-3.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2020/6/17 16:27:47编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
libo8284
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:72 积分:586 威望:0 精华:0 注册:2020/5/8 22:46:00
  发帖心情 Post By:2020/6/17 17:05:00 [只看该作者]

解决了

我把生成datagrid那一段代码,放到一个自定义函数里,initTable

然后,在下拉表里,修改title中责任人的参数,再执行initTable函数

 回到顶部
帅哥哟,离线,有人找我吗?
reachtone
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:版主 帖子:2098 积分:17572 威望:0 精华:19 注册:2008/9/2 10:09:00
  发帖心情 Post By:2020/6/17 18:06:00 [只看该作者]

哦,我以为你是要在表格编辑的过程中,点击上面的“项目”、“子项”后再动态修改“责任人”的combobox列表项目。
如果“责任人”是固定根据选择的“项目”、“子项”来生成列表,你倒可以直接用js创建表头数组(不要用服务器返回的表头数据),在这个数组里再定义每个列的编辑器,这样代码可能会更简洁。生成表的时候,把表头数组变量扔到columns里就行了。
看的出来,你已经具备了相当好的js基础,实现这些应该很轻松。

 回到顶部
帅哥哟,离线,有人找我吗?
libo8284
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:72 积分:586 威望:0 精华:0 注册:2020/5/8 22:46:00
  发帖心情 Post By:2020/6/17 19:38:00 [只看该作者]

多谢周老师指点

 回到顶部