Ext JS4百强应用: combobox+tree下拉树 支持单选多选级联选择 --第7强

本下拉树支持带复选框和不带复选框的JSON数据的,带复选框的下拉树也实现了单选功能,只需配置一下即可!

效果图.

  • 不带checked的json数据格式只支持单选

  • 带jchecked的json数据的单选

  • 带checked的json数据的多选,可支持级联操作,级联分为级联父节点,级联子节点,两者都级联

封装基类代码

:ComboboxTree.js

[html] view plain copy
  1. Ext.define("Ext.ux.ComboboxTree",{
  2. extend:"Ext.form.field.Picker",
  3. requires:["Ext.tree.Panel"],
  4. initComponent:function(){
  5. varself=this;
  6. Ext.apply(self,{
  7. fieldLabel:self.fieldLabel,
  8. labelWidth:self.labelWidth
  9. });
  10. self.callParent();
  11. },
  12. createPicker:function(){
  13. varself=this;
  14. varstore=Ext.create('Ext.data.TreeStore',{
  15. proxy:{
  16. type:'ajax',
  17. url:self.storeUrl
  18. },
  19. sorters:[{
  20. property:'leaf',
  21. direction:'ASC'
  22. },
  23. {
  24. property:'text',
  25. direction:'ASC'
  26. }],
  27. root:{
  28. id:self.rootId,
  29. text:self.rootText
  30. },
  31. nodeParameter:self.treeNodeParameter
  32. });
  33. self.picker=newExt.tree.Panel({
  34. height:300,
  35. autoScroll:true,
  36. floating:true,
  37. focusOnToFront:false,
  38. shadow:true,
  39. ownerCt:this.ownerCt,
  40. useArrows:true,
  41. store:store,
  42. rootVisible:false
  43. });
  44. self.picker.on({
  45. checkchange:function(record,checked){
  46. varcheckModel=self.checkModel;
  47. if(checkModel=='double'){
  48. varroot=self.picker.getRootNode();
  49. root.cascadeBy(function(node){
  50. if(node.get('text')!=record.get('text')){
  51. node.set('checked',false);
  52. }
  53. });
  54. if(record.get('leaf')&&checked){
  55. self.setRawValue(record.get('id'));//隐藏值
  56. self.setValue(record.get('text'));//显示值
  57. }else{
  58. record.set('checked',false);
  59. self.setRawValue('');//隐藏值
  60. self.setValue('');//显示值
  61. }
  62. }else{
  63. varcascade=self.cascade;
  64. if(checked==true){
  65. if(cascade=='both'||cascade=='child'||cascade=='parent'){
  66. if(cascade=='child'||cascade=='both'){
  67. if(!record.get("leaf")&&checked)record.cascadeBy(function(record){
  68. record.set('checked',true);
  69. });
  70. }
  71. if(cascade=='parent'||cascade=='both'){
  72. pNode=record.parentNode;
  73. for(;pNode!=null;pNode=pNode.parentNode){
  74. pNode.set("checked",true);
  75. }
  76. }
  77. }
  78. }elseif(checked==false){
  79. if(cascade=='both'||cascade=='child'||cascade=='parent'){
  80. if(cascade=='child'||cascade=='both'){
  81. if(!record.get("leaf")&&!checked)record.cascadeBy(function(record){
  82. record.set('checked',false);
  83. });
  84. }
  85. }
  86. }
  87. varrecords=self.picker.getView().getChecked(),
  88. names=[],
  89. values=[];
  90. Ext.Array.each(records,
  91. function(rec){
  92. names.push(rec.get('text'));
  93. values.push(rec.get('id'));
  94. });
  95. self.setRawValue(values.join(';'));//隐藏值
  96. self.setValue(names.join(';'));//显示值
  97. }
  98. },
  99. itemclick:function(tree,record,item,index,e,options){
  100. varcheckModel=self.checkModel;
  101. if(checkModel=='single'){
  102. if(record.get('leaf')){
  103. self.setRawValue(record.get('id'));//隐藏值
  104. self.setValue(record.get('text'));//显示值
  105. }else{
  106. self.setRawValue('');//隐藏值
  107. self.setValue('');//显示值
  108. }
  109. }
  110. }
  111. });
  112. returnself.picker;
  113. },
  114. alignPicker:function(){
  115. varme=this,
  116. picker,isAbove,aboveSfx='-above';
  117. if(this.isExpanded){
  118. picker=me.getPicker();
  119. if(me.matchFieldWidth){
  120. picker.setWidth(me.bodyEl.getWidth());
  121. }
  122. if(picker.isFloating()){
  123. picker.alignTo(me.inputEl,"",me.pickerOffset);//""->tl
  124. isAbove=picker.el.getY()<me.inputEl.getY();
  125. me.bodyEl[isAbove?'addCls':'removeCls'](me.openCls+aboveSfx);
  126. picker.el[isAbove?'addCls':'removeCls'](picker.baseCls+aboveSfx);
  127. }
  128. }
  129. }
  130. });


调用方法

[html] view plain copy
  1. Ext.onReady(function(){
  2. varcom=Ext.create("Ext.ux.ComboboxTree",{
  3. id:'name',
  4. name:'name',
  5. hiddenName:'hiddenName',
  6. storeUrl:'data/tree2.json',
  7. cascade:'child',//级联方式:1.child子级联;2.parent,父级联,3,both全部级联
  8. checkModel:'single',//当json数据为不带checked的数据时只配置为single,带checked配置为double为单选,不配置为多选
  9. width:270,
  10. fieldLabel:'单位树',
  11. labelWidth:60,
  12. rootId:'1',
  13. rootText:'DRP',
  14. treeNodeParameter:'',
  15. renderTo:Ext.getBody()
  16. });
  17. });


两种json格式的数据

一,不带复选框的数据

[html] view plain copy
  1. [{
  2. "text":"ToDo",
  3. "cls":"folder",
  4. "expanded":true,
  5. "children":[{
  6. "text":"Gojogging",
  7. "leaf":true
  8. },{
  9. "text":"Takeanap",
  10. "leaf":true
  11. },{
  12. "text":"ClimbEverest",
  13. "leaf":true
  14. }]
  15. },{
  16. "text":"GroceryList",
  17. "cls":"folder",
  18. "children":[{
  19. "text":"Bananas",
  20. "leaf":true
  21. },{
  22. "text":"Milk",
  23. "leaf":true
  24. },{
  25. "text":"Cereal",
  26. "leaf":true
  27. },{
  28. "text":"Energyfoods",
  29. "cls":"folder",
  30. "children":[{
  31. "text":"Coffee",
  32. "leaf":true
  33. },{
  34. "text":"RedBull",
  35. "leaf":true
  36. }]
  37. }]
  38. },{
  39. "text":"RemodelProject",
  40. "cls":"folder",
  41. "children":[{
  42. "text":"Finishthebudget",
  43. "leaf":true
  44. },{
  45. "text":"Callcontractors",
  46. "leaf":true
  47. },{
  48. "text":"Choosedesign",
  49. "leaf":true
  50. }]
  51. }]


二.带复选框的数据

[html] view plain copy
  1. [{
  2. "text":"ToDo",
  3. "cls":"folder",
  4. "expanded":true,
  5. "children":[{
  6. "text":"Gojogging",
  7. "leaf":true,
  8. "checked":true
  9. },{
  10. "text":"Takeanap",
  11. "leaf":true,
  12. "checked":false
  13. },{
  14. "text":"ClimbEverest",
  15. "leaf":true,
  16. "checked":false
  17. }]
  18. },{
  19. "text":"GroceryList",
  20. "cls":"folder",
  21. "children":[{
  22. "text":"Bananas",
  23. "leaf":true,
  24. "checked":false
  25. },{
  26. "text":"Milk",
  27. "leaf":true,
  28. "checked":false
  29. },{
  30. "text":"Cereal",
  31. "leaf":true,
  32. "checked":false
  33. },{
  34. "text":"Energyfoods",
  35. "cls":"folder",
  36. "children":[{
  37. "text":"Coffee",
  38. "leaf":true,
  39. "checked":false
  40. },{
  41. "text":"RedBull",
  42. "leaf":true,
  43. "checked":false
  44. }]
  45. }]
  46. },{
  47. "text":"RemodelProject",
  48. "cls":"folder",
  49. "children":[{
  50. "text":"Finishthebudget",
  51. "leaf":true,
  52. "checked":false
  53. },{
  54. "text":"Callcontractors",
  55. "leaf":true,
  56. "checked":false
  57. },{
  58. "text":"Choosedesign",
  59. "leaf":true,
  60. "checked":false
  61. }]
  62. }]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值