做三级联动时出现的问题

1、 一级菜单改变后二级菜单会根据关联关系查询,但是三级菜单未清空,通过获取this.next().next().getStore().remove() this().next().next().setValue(‘’); 未执行。

原因:在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基本的资料,去学习!!加油。







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值