Ext.form.FormPanel的bug?

 

Ext真的强大,所以选择来做后台,在做一个权限时发现了一个问题,也不知道是不是BUG,如果有遇到同样的问题,请指教,3Q

在说明问题之前,先说下我怎么写的Ext,我做采用JS调用,所有JS都是动态加载,就是菜单点击时才加载一个JS(通过网上的Ext.ux.JSLoader,小有改动);

动态加载的好处自认为可以解决在不影响第一次打开加载过多JS而造成的问题,在加载JS到TabPanel后,如果再点同样菜单是不会再加载JS的,脚本做了判断(这个很重要,后面的问题可以排除是多次加载造成的);

下面是问题: Ext.form.FormPanel在加载后出现反复加载items中的控件,而且加载不全,有的没了有的又多了;第一次加载有FormPanel的js,都是正常的,如果再加载一次就会出问题如图那样的反复加载items中的内容;

感觉数据库来的数据不会有问题,道是加到formpanel的静态控件checkbox有问题

Js代码 复制代码  收藏代码
  1. permission = function(node) {   
  2.     var checkall = new Ext.form.Checkbox({ id: 'checkall', name: 'checkall', fieldLabel: '功能名称', boxLabel: '全选', inputValue: true,   
  3.         handler: function() {   
  4.             if (this.checked) {   
  5.                 Ext.select('input[name^=cbopitem]').each(function() { this.checked = true; });   
  6.             } else {   
  7.                 Ext.select('input[name^=cbopitem]').each(function() { this.checked = false; });   
  8.             }   
  9.         }   
  10.     });   
  11.     var form = new Ext.form.FormPanel({   
  12.         id: 'roleopform',   
  13.         title: '当前位置:角色管理 > ' + node.text,   
  14.         border: false,   
  15.         plain: true,   
  16.         layout: "form",   
  17.         buttonAlign: 'center',   
  18.         bodyStyle: 'padding:0 10px 0;',   
  19.         items: [checkall],   
  20.         buttons: [{   
  21.             text: '保存',   
  22.             handler: function() {   
  23.                 if (form.getForm().isValid()) {   
  24.                     Ext.MessageBox.show({ title: '提示框', msg: '你确定要修改吗?', buttons: Ext.MessageBox.OKCANCEL, icon: Ext.MessageBox.WARNING,   
  25.                         fn: function(btn) {   
  26.                             if (btn == 'ok') {   
  27.                                 form.getForm().submit({   
  28.                                     waitMsg: "数据保存中...",   
  29.                                     title: "请稍侯",   
  30.                                     url: '/sys/permissionsave',   
  31.                                     params: { id: node.attributes.id },   
  32.                                     success: function(form, response) {   
  33.                                         var temp = Ext.util.JSON.decode(response.response.responseText);   
  34.                                         Ext.Msg.alert("系统提示!", temp.msg);   
  35.                                     },   
  36.                                     failure: function(form, response) {   
  37.                                         Ext.MessageBox.alert("提示!""保存信息失败!");   
  38.                                     }   
  39.                                 });   
  40.                             }   
  41.                         }   
  42.                     });   
  43.                 }   
  44.             }   
  45.         }, {   
  46.             text: '取消',   
  47.             handler: function() {   
  48.                 form.getForm().reset();   
  49.             }   
  50.         }   
  51.         ]   
  52.     });   
  53.     //加载角度权限   
  54.     var conn = Ext.lib.Ajax.getConnectionObject().conn;   
  55.     conn.open("POST"'/sys/permission/' + node.attributes.id, false);   
  56.     conn.send(null);   
  57.     var perJson = Ext.util.JSON.decode(conn.responseText);   
  58.     //加载功能   
  59.     var checklist = [];   
  60.     conn.open("POST"'/sys/loadappselect'false);   
  61.     conn.send(null);   
  62.     var respText = Ext.util.JSON.decode(conn.responseText);   
  63.     Ext.each(respText, function(item) {   
  64.         var id = item.ID;   
  65.         var path = item.Path;   
  66.         var name = item.Name;   
  67.         name = GetCategoryPath(path, '|') + name;   
  68.         var checkGroup = [];   
  69.         //加载功能操作   
  70.         conn.open("POST"'/sys/operation/' + id, false);   
  71.         conn.send(null);   
  72.         var respText1 = Ext.util.JSON.decode(conn.responseText);   
  73.         Ext.each(respText1, function(item1) {   
  74.             //加载功能操作是否设置字段   
  75.             conn.open("POST"'/sys/field/' + item1.ID, false);   
  76.             conn.send(null);   
  77.             var respField = Ext.util.JSON.decode(conn.responseText);   
  78.             var opname = item1.Operation;   
  79.             if (respField.length > 0) opname += '(<a href="javascript:;">设置字段</a>)';   
  80.             var chk = { xtype: 'checkbox', boxLabel: opname, name: 'cbopitem', inputValue: item1.ID, checked: getopIscheck(perJson, item1.ID) };   
  81.             checkGroup.push(chk);   
  82.         });   
  83.         if (checkGroup.length > 0)   
  84.             checklist.push(new Ext.form.CheckboxGroup({ fieldLabel: name, columns: 1, items: checkGroup }));   
  85.     });   
  86.     form.add(checklist);   
  87.     GridMain(node, form);   
  88. };   
  89. function getopIscheck(perJson, opid) {   
  90.     var check = false; length   
  91.     for (var i = 0; i < perJson.length; i++) {   
  92.         if (perJson[i].OperationID == opid) {   
  93.             check = true;   
  94.             break;   
  95.         }   
  96.     }   
  97.     return check;   
  98. }  

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值