原因:在getSubmitValue方法中未获取到。当一级菜单选择的时候可以加载二级菜单的store,但是二级菜单的store.load()事件不会触发getSubmitValue方法,导致三级菜单不会重新加载,还是原来的值。
修改为在方法外添加一个change事件。可以实现了。没有选用select事件是由于在其他控件使用了select事件,会被下面的覆盖。当一个页面需要加载多个change事件不被覆盖是可以用Ext.getCmp(‘name’).on(‘change’,function())
change事件可以加载load事件同时可以触发getSubmitValue方法(原来代码是加载这个方法中,但是当第二个的store.load()后并没有触发这个方法)
if ('30' == dataColumn.inputType||'31' == dataColumn.inputType||'32' ==dataColumn.inputType) {//级联选择 column.multiSelect = false; if('31' == dataColumn.inputType || '32' == dataColumn.inputType){ column.disabled = true; } if('30' == dataColumn.inputType || '31' == dataColumn.inputType){ column.listeners=column.listeners||{}; column.listeners.change = function(me, n, o) { // var combo = Ext.getCmp(Ext.select('.'+dataColumn.columnName).elements[0].id); this.next().enable(); this.next().getStore().proxy.extraParams.description=n==null?' ':n//将一级菜单的值作为参数查询二级菜单、三级类似 this.next().getStore().load(); }; } column.getSubmitValue = function () { var value = this.getValue(); if (Ext.isEmpty(value)) { value = ''; } return value; }; }
2、回显的时候没有成功(值都保存到数据库中了)
在页面初始化的时候将所有的数据字典(配置的选择的内容)都加载了,但是由于二级菜单和三级菜单查询的时候需要传一个上一个节点的值作为参数,而后台数据库中没有判断这个字段是否为空则不作为条件查询(修改了sql语句)
回显的时候
if('32' == dataColumn.inputType||'31' == dataColumn.inputType){//级联的二三级菜单回显 // column.cls = dataColumn.extendedField2; if(dataColumn.defaultValue){ column.disabled = false; column.listeners.render = function(){//回显,重新加载子系统类别的store this.getStore().proxy.extraParams.description=this.prev().value; this.getStore().load(); } } }另外在二级菜单触发change事件的时候还没有选择值所以会望后台传一个空值,这样出现:当一级菜单发生改变三级菜单不会清空,所以加一个判断如果change的第二个参数是空的话就传一个‘~’到后台找不到对应的三级菜单选项(完成)
3、在初始化时二级和三级菜单默认为disabled=true;
但是通过this.next().disabled = false并没有控制显示。是通过一个enable()方法可以控制控件的显示与否。
1、在补录模板配置中将节点一的值作为节点二的class名(扩展字段2)通过
column.cls = dataColumn.extendedFile2;
var combo = Ext.getCmp(Ext.select(‘.’+dataColumn.columnName).elements[0].id).enable();
combo.enable();//设置disable=false;
combo.disable();//设置disable=true;
来动态显示
2、直接用this.next().enable();即可
注:回显的时候将column.disable = false;
由于对extjs的方法不熟悉,所以导致一直在修改代码测试,浪费了很多的时间,还是需要看ext基本的资料,去学习!!加油。