CascadingCityField.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /**
  2. * 级联国家省份城市下拉框
  3. * @author chenp
  4. */
  5. Ext.define('erp.view.core.form.CascadingCityField', {
  6. extend: 'Ext.form.FieldContainer',
  7. alias: 'widget.cascadingcityfield',
  8. layout: 'hbox',
  9. items: [],
  10. showscope: true,
  11. initComponent : function(){
  12. this.cls = (this.cls || '') + ' x-form-field-multi';
  13. this.callParent(arguments);
  14. var me = this;
  15. var tmpData = [];
  16. var counData = [];
  17. var provData = [];
  18. var cityData = [];
  19. var proIndex = '';
  20. var myStore = new Ext.data.Store({
  21. proxy : {
  22. type : 'ajax',
  23. url : basePath + 'app/store/ma/CityComboStore/city.json'
  24. },
  25. autoLoad : false,
  26. fields : [{
  27. name : 'id'
  28. }, {
  29. name : 'name'
  30. }]
  31. });
  32. var combo0=Ext.create('Ext.form.field.ComboBox', {
  33. flex:0.33,
  34. editable: true,
  35. groupName:me.groupName,
  36. store: Ext.create('Ext.data.Store', {
  37. fields : [ {name : 'display'} ],
  38. data : counData,
  39. autoLoad : true
  40. }),
  41. queryMode: 'local',
  42. displayField: 'display',
  43. valueField: 'display',
  44. mode : 'local',
  45. triggerAction : 'all',
  46. value:me.value,
  47. listeners: {
  48. focus:function(){
  49. this.store.loadData(counData);
  50. },
  51. select: function (combo, record, index) {
  52. me.items.items[3].setValue(record[0].data.display);
  53. var provCombo = Ext.getCmp(me.secondname.split('#')[0]+'Combo');
  54. provCombo.clearValue();
  55. if (combo.store.isFiltered())combo.store.clearFilter(true);
  56. /*if(this.store.snapshot && this.store.snapshot != this.store.data){
  57. this.store.loadData(this.store.snapshot);}*/
  58. proIndex='0_'+combo.store.find('display',record[0].data.display);
  59. var index = myStore.find('id',proIndex);
  60. tmpData = myStore.getAt(index).get('name');
  61. provData=[];
  62. for (var i = 0; i < tmpData.length; i++) {
  63. provData.push([tmpData[i]]);
  64. }
  65. provCombo.setValue(provData[0]);
  66. Ext.getCmp(me.secondname.split('#')[0]).setValue(provData[0]);
  67. provCombo.store.loadData(provData);
  68. var cityCombo = Ext.getCmp(me.secondname.split('#')[1]+'Combo');
  69. cityCombo.clearValue();
  70. tmpData = myStore.getAt(myStore.find('id',proIndex+'_0')).get('name');
  71. cityData=[];
  72. for (var i = 0; i < tmpData.length; i++) {
  73. cityData.push([tmpData[i]]);
  74. }
  75. cityCombo.setValue(cityData[0]);
  76. Ext.getCmp(me.secondname.split('#')[1]).setValue(cityData[0]);
  77. cityCombo.store.loadData(cityData);
  78. }
  79. }
  80. });
  81. var combo1=Ext.create('Ext.form.field.ComboBox', {
  82. id:me.secondname.split('#')[0]+'Combo',
  83. flex:0.33,
  84. editable: true,
  85. groupName:me.groupName,
  86. store: Ext.create('Ext.data.Store', {
  87. fields : [ {name : 'display'} ],
  88. data : provData,
  89. autoLoad : true
  90. }),
  91. queryMode: 'local',
  92. mode : 'local',
  93. triggerAction : 'all',
  94. displayField: 'display',
  95. valueField: 'display',
  96. value:Ext.getCmp(me.secondname.split('#')[0])?Ext.getCmp(me.secondname.split('#')[0]).getValue():'',
  97. listeners: {
  98. select: function (combo, record, index) {
  99. Ext.getCmp(me.secondname.split('#')[0]).setValue(record[0].data.display);
  100. var cityCombo = Ext.getCmp(me.secondname.split('#')[1]+'Combo');
  101. cityCombo.clearValue();
  102. if (combo.store.isFiltered())combo.store.clearFilter(true);
  103. var index = myStore.find('id',proIndex+'_'+combo.store.find('display',record[0].data.display));
  104. tmpData = myStore.getAt(index).get('name');
  105. cityData=[];
  106. for (var i = 0; i < tmpData.length; i++) {
  107. cityData.push([tmpData[i]]);
  108. }
  109. cityCombo.setValue(cityData[0]);
  110. Ext.getCmp(me.secondname.split('#')[1]).setValue(cityData[0]);
  111. cityCombo.store.loadData(cityData);
  112. }
  113. }
  114. });
  115. var combo2=Ext.create('Ext.form.field.ComboBox', {
  116. id:me.secondname.split('#')[1]+'Combo',
  117. flex:0.33,
  118. editable: true,
  119. groupName:me.groupName,
  120. store: Ext.create('Ext.data.Store', {
  121. fields : [ {name : 'display'} ],
  122. data : cityData,
  123. autoLoad : true
  124. }),
  125. queryMode: 'local',
  126. mode : 'local',
  127. triggerAction : 'all',
  128. displayField: 'display',
  129. valueField: 'display',
  130. value:Ext.getCmp(me.secondname.split('#')[1])?Ext.getCmp(me.secondname.split('#')[1]).getValue():'',
  131. listeners: {
  132. select: function (combo, record, index) {
  133. Ext.getCmp(me.secondname.split('#')[1]).setValue(record[0].data.display);
  134. }
  135. }
  136. });
  137. myStore.load({
  138. scope : myStore,
  139. callback : function(records, options, success){
  140. var index = myStore.find('id','0');
  141. tmpData = myStore.getAt(index).get('name');
  142. for (var i = 0; i < tmpData.length; i++) {
  143. counData.push([tmpData[i]]);
  144. }
  145. me.insert(0,combo0);
  146. me.insert(1,combo1);
  147. me.insert(2,combo2);
  148. me.insert(3,{
  149. xtype:'hidden',
  150. name:me.name,
  151. value:me.value
  152. });
  153. }
  154. });
  155. }
  156. });