转载自:http://blog.csdn.net/zhengyuechuan/article/details/9327291

前台controller代码:

  1. Ext.define('zyc.controller.Filter', {
  2. extend: 'Ext.app.Controller',
  3. init:function(){
  4. this.control({
  5. 'filterpanel':{
  6. render:function(view,opts){
  7. Ext.Ajax.request({
  8. url:'user!getForm.action',
  9. success:function(response,o){
  10. var forms=eval('('+response.responseText+')');
  11. var checkboxgroups=forms[0].checkboxgroup;//获得所有的checkboxgroup
  12. var radiogroups=forms[0].radiogroup;//获得所有的radiogroup
  13. var cbgCount=checkboxgroups.length;
  14. var rdoCount=radiogroups.length;
  15. if(toolBar==null){
  16. view.add({
  17. xtype:'toolbar',
  18. name: 'name'
  19. });
  20. }
  21. for(i=0;i<cbgCount;i++){
  22. var checkboxgroup=checkboxgroups[i];//获得单独一个checkboxgroup对象
  23. var checkboxs=checkboxgroup.checkBox;
  24. var fieldLabelValue=checkboxgroup.fieldLabel;
  25. var cbgName=checkboxgroup.cbgName;
  26. console.debug(fieldLabelValue);
  27. var newCheckBoxs=new Array();
  28. for(var j=0;j<checkboxs.length;j++){
  29. newCheckBoxs.push(
  30. Ext.form.Checkbox({
  31. boxLabel: checkboxs[j].boxLabel,
  32. inputValue: checkboxs[j].inputValue,
  33. checked: checkboxs[j].checked,
  34. name: checkboxs[j].name,
  35. labelWidth:230,
  36. width:80
  37. })
  38. );
  39. }
  40. var toolBar=view.down('toolbar');
  41. toolBar.hide();
  42. view.add({
  43. xtype:'checkboxgroup',
  44. name: cbgName,
  45. columns: 5,
  46. vertical: true,
  47. fieldLabel: fieldLabelValue,
  48. items:newCheckBoxs,
  49. listeners:{
  50. change:function(f ,newValue,oldValue,o){
  51. var self=this;
  52. var checkeds=f.getChecked();
  53. var allCBG=Ext.ComponentQuery.query('checkboxgroup')//获得所有
  54. var allCheckedCount=0;//由于页面有多个checkboxgroup,所有要找出所有被选择的数量
  55. Ext.each(allCBG,function(Cbg){
  56. if(Cbg.getChecked().length>0){
  57. allCheckedCount=Cbg.getChecked().length;
  58. }
  59. })
  60. console.debug(self);
  61. var cgButtonObj=toolBar.down('button[ref='+self.name+']');//获得被单击的cb按钮对象
  62. // console.debug(oldValue);
  63. if(checkeds.length>0){
  64. var checkValues=[];
  65. for(i=0;i<checkeds.length;i++){
  66. checkValues.unshift(checkeds[i].inputValue)
  67. }
  68. // console.debug(checkValues)
  69. if(toolBar.isHidden()){
  70. toolBar.show();
  71. cgButtonObj.show();
  72. }
  73. if(cgButtonObj.isHidden()){
  74. cgButtonObj.show();
  75. }
  76. cgButtonObj.setText('所选'+self.name+':'+checkValues);
  77. cgButtonObj.setTooltip (checkValues);
  78. cgButtonObj.setIconCls ('icon-stat');
  79. }
  80. else {
  81. cgButtonObj.hide();
  82. }
  83. if(allCheckedCount<=0){
  84. toolBar.hide();
  85. }
  86. },
  87. afterrender:function(view, eOpts ){
  88. var tooButton=new Ext.button.Button({
  89. ref:cbgName,
  90. maxWidth :200,
  91. shadow:'drop '
  92. });
  93. //console.debug(tooButton);
  94. toolBar.add(tooButton);
  95. tooButton.on('mouseover',function(){
  96. tooButton.setIconCls('icon-delete');
  97. },this);
  98. tooButton.on('mouseout',function(){
  99. tooButton.setIconCls('icon-edit');
  100. },this);
  101. tooButton.on('click',function(){
  102. var checkeds=view.getChecked();
  103. view.items.each(function(item) {
  104. item.setValue(false);
  105. });
  106. },this)
  107. }
  108. }
  109. });
  110. //newCheckBoxs=null;
  111. }
  112. },
  113. failure:function(response,o){
  114. console.debug('fail');
  115. }
  116. })
  117. }
  118. }
  119. });
  120. },
  121. views:[
  122. 'filter.FilterPanel'
  123. ],
  124. stores :[
  125. ],
  126. models :[
  127. ]
  128. });

后天返回的数据:

  1. [{"checkboxgroup":[{"cbgName":"dept","checkBox":[{"boxLabel":"销售部","checked":false,"id":1,"inputValue":"销售部","name":"dept"},{"boxLabel":"技术部","checked":false,"id":2,"inputValue":"技术部","name":"dept"},{"boxLabel":"普通部","checked":false,"id":3,"inputValue":"普通部","name":"dept"},{"boxLabel":"资源部","checked":false,"id":4,"inputValue":"资源部","name":"dept"},{"boxLabel":"后勤部","checked":false,"id":5,"inputValue":"后勤部","name":"dept"},{"boxLabel":"行政部","checked":false,"id":6,"inputValue":"行政部","name":"dept"},{"boxLabel":"管理部","checked":false,"id":7,"inputValue":"管理部","name":"dept"},{"boxLabel":"体育部","checked":false,"id":8,"inputValue":"体育部","name":"dept"},{"boxLabel":"劳动部","checked":false,"id":9,"inputValue":"劳动部","name":"dept"},{"boxLabel":"策划部","checked":false,"id":10,"inputValue":"策划部","name":"dept"}],"fieldLabel":"部门选择"},{"cbgName":"user","checkBox":[{"boxLabel":"郑一","checked":false,"id":1,"inputValue":"郑一","name":"user"},{"boxLabel":"陈二","checked":false,"id":2,"inputValue":"陈二","name":"user"},{"boxLabel":"张三","checked":false,"id":3,"inputValue":"张三","name":"user"},{"boxLabel":"李四","checked":false,"id":4,"inputValue":"李四","name":"user"},{"boxLabel":"王五","checked":false,"id":5,"inputValue":"王五","name":"user"},{"boxLabel":"赵六","checked":false,"id":6,"inputValue":"赵六","name":"user"},{"boxLabel":"林七","checked":false,"id":7,"inputValue":"林七","name":"user"},{"boxLabel":"孙八","checked":false,"id":8,"inputValue":"孙八","name":"user"},{"boxLabel":"吴九","checked":false,"id":9,"inputValue":"吴九","name":"user"},{"boxLabel":"蔡十","checked":false,"id":10,"inputValue":"蔡十","name":"user"}],"fieldLabel":"用户选择"}],"radiogroup":[]}]

简单代码下载

效果图

 

ext4.1动态生成多个checkboxgroup(或者radiogroup),并且有toolbar操作、的更多相关文章

  1. ExtJs 3.0 动态生成 CheckBox

    在开发过程中,往往需要利用数据动态生成Checkbox.如权限节点.考试答案,调查选项等等.在Extjs中,有两种方法来获取后台数据,一是Ext.Ajax()方法,第二种是利用 Store,store ...

  2. 关于动态生成data组件

    /*! * WeX5 v3 (http://www.justep.com) * Copyright 2015 Justep, Inc. * Licensed under Apache License, ...

  3. Aop动态生成代理类时支持带参数构造函数

    一.背景 在某些情况下,我们需要植入AOP代码的类并没有默认构造函数.那么此时动态生成的代理类也需要相同签名的构造函数,并且内部调用原始类的构造函数.自己折腾了1晚上没搞定,现在搞定了发出来供大家一起 ...

  4. dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

    dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散.嵌套在 js 中的修改样式的代码剥离出来.比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化 ...

  5. ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi

    点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...

  6. 【.NET深呼吸】Zip文件操作(2):动态生成Zip文档

    通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成zip文件. 文件流操作 ...

  7. jquery动态生成的元素添加事件的方法

    动态生成的元素如果要添加事件,要写成 $(document).on("click", "#txtName", function() { alert(this.v ...

  8. 利用Java动态生成 PDF 文档

    利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...

  9. 用C#从数据库动态生成AdminLTE菜单的一种方法

    当前的应用设计风格趋于Flat扁平化,很多基于BootStrap实现了很多UI非常漂亮的管理界面(Bootstrap admin template). 此核心文件开源在Github:https://g ...

随机推荐

  1. MFC中release版本和debug版本区别

    最近MFC写了个程序,生成release版,原来正常,后来删掉了些控件再编译运行,结果竟然报内存读写错误,debug却是正常的.后来将“Project   Settings”   中   “C++/C ...

  2. CLRS: online maximum (n,k)algorithm

    //the first k elements interviewed and rejected, //for  the latter n-k elements ,if value >max,re ...

  3. CI系统

  4. 织梦dedecms调用栏目的SEO标题、描述、关键字的方法

    调用SEO标题:<title>{dede:field.title/}_{dede:field.seotitle /}-{dede:global.cfg_webname/}</titl ...

  5. 【MVC】关于Action返回结果类型的事儿(下)

    代码

  6. JavaScript探秘系列

    此文章所在专题列表如下: 我们应该如何去了解JavaScript引擎的工作原理 JavaScript探秘:编写可维护的代码的重要性 JavaScript探秘:谨慎使用全局变量 JavaScript探秘 ...

  7. Django搭建及源码分析(二)

    上节针对linux最小系统,如何安装Django,以及配置简单的Django环境进行了说明. 本节从由Django生成的manage.py开始,分析Django源码.python版本2.6,Djang ...

  8. rpm软件包

    安装软件:rpm -i software.rpm卸载软件:rpm -e software升级形式安装:rpm -U software-new.rpmrpm支持通过http.ftp协议安装软件:rpm ...

  9. POJ C程序设计进阶 编程题#3: 发票统计

    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个小型的报账系统,它有如 ...

  10. 正确使用stl map的erase方法

    先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.era ...