乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      javascript – 如何過濾ExtJs GridPanel / ExtJs商店?

       印度阿三17 2019-07-18

      我是ExtJs的新手.我有一個與數(shù)據(jù)存儲綁定的GridPanel.我有一個checkboxgroup,它包含GridPanel行的可能值.我想用checkboxgroup值過濾GridPanel.

      這是代碼 –

      Store1 = new Ext.data.JsonStore({
      url: 'CustomerProfiles/GetDetails',
      root: 'rows',
      fields:['Name','Id']
      });
      
      DetailedResults =
                      {
                          xtype: 'grid',
                          autoHeight: true,
                          autoWidth: true,
                          autoScroll: true,
                          border: false,
                          trackMouseOver: false,
                          frame: true,
                          store: Store1,
                          columns: [
                              { header: 'Name', dataIndex: 'Name', width: 90 },
                              { header: 'Id', dataIndex: 'Id', width: 50 }
                          ]
                      };
      
      Leftpanel = new Ext.Panel({
      id: 'Leftpanel',
      frame: true,
      width: 175,
      items: [
              {
                  xtype: 'label'
              },
              {
                  xtype: 'checkboxgroup',
                  columns: 1,
                  vertical: true,
                  items: [{
                      boxLabel: 'ALL',
                      name: 'chkName',
                      inputValue: 'all'
                  }, {
                      boxLabel: 'N1',
                      name: 'chkName',
                      inputValue: 'N1'
                  }, {
                      boxLabel: 'N2',
                      name: 'chkName',
                      inputValue: 'N2'
                  }, {
                      boxLabel: 'N3',
                      name: 'chkName',
                      inputValue: 'N3'
                  }], listeners: {
                      change: {
                          fn: function () {
                              Store1.clearFilter();
                              var selectedValue = this.getValue();
                              for (var i = 0; i < selectedValue.length; i  ) {
                                  Store1.filter('Name', selectedValue[i].inputValue);
                              }
                          }
                      }
                  }             
              }            
      ]});
      

      哪里出錯了?

      PS:我使用的是3.4版本

      解決方法:

      getValue()方法有點棘手,它返回的對象具有可變結(jié)構(gòu),具體取決于結(jié)果集,這會導(dǎo)致代碼中出現(xiàn)問題.但是,getChecked()方法更簡單,我將在解決方案中使用它.
      然后,我們使用filterBy,因為它在這種情況下更有用.
      在這里你有解決方案(評論內(nèi)聯(lián)):

      change: {
          fn: function () {
              var checkedBoxes = this.getChecked(), //Array of checked checkboxes
                  selectedValues = []; //Array of selected values                                       
              for (var i = 0; i < checkedBoxes.length; i  ) {
                  selectedValues.push(checkedBoxes[i].inputValue); //Add each inputValue to the array                                       
              }                                    
              var allSelected = Ext.Array.contains(selectedValues, 'all'); //Whether the 'ALL' option was selected
              Store1.filterBy(function(record){
                 //If all was selected or if the name is included in the selectedValues, include the item in the filter
                 return allSelected || Ext.Array.contains(selectedValues, record.get('Name'));                                         
              });
          }
      }
      

      問題解決了.經(jīng)過測試和工作:)

      UPDATE
      上面的代碼適用于ExtJs> = 4.對于Ext 3.4,這是代碼:

      change: {
          fn: function () {
              var selectedValues = []; //Array of selected values 
              this.items.each(function(checkbox){
                  if(checkbox.checked)
                      selectedValues.push(checkbox.inputValue);
              });                                    
              var allSelected = selectedValues.indexOf('all') >= 0; //Whether the 'ALL' option was selected           
              Store1.filterBy(function(record){
                 //If all was selected or if the name is included in the selectedValues, include the item in the filter
                 return allSelected || selectedValues.indexOf(record.get('Name')) >= 0;                                         
              });
          }
      }
      

      可選(額外改進,僅適用于ExtJs 4.x)
      但是,檢查您的應(yīng)用程序,我認為可以進行以下改進:

      >根據(jù)商店數(shù)據(jù)動態(tài)創(chuàng)建過濾器復(fù)選框
      >將ALL復(fù)選框與其余復(fù)選框同步(即選擇ALL時,選中所有其他復(fù)選框)

      這是具有改進的代碼:

      var Store1 = new Ext.data.JsonStore({
          proxy: {
              type: 'ajax',                
              url: 'CustomerProfiles/GetDetails',
              reader: {                    
                  root: 'rows'                    
              }
          },            
          autoLoad: true,                        
          fields: ['Name','Id'],
          listeners: {
                  //Each time the store is loaded, we create the checkboxes dynamically, and add the checking logic in each one
              load: function(store, records){
                  createCheckboxesFromStore(store);                       
              }
          }
      });
      
      var DetailedResults = {
          xtype: 'grid',
          autoHeight: true,
          autoWidth: true,
          autoScroll: true,
          border: false,
          trackMouseOver: false,
          frame: true,
          store: Store1,
          columns: [
              { header: 'Name', dataIndex: 'Name', width: 90 },
              { header: 'Id', dataIndex: 'Id', width: 50 }
          ]
      };
      
      var Leftpanel = new Ext.Panel({
          id: 'Leftpanel',
          frame: true,
          width: 175,
          items: [
              {
                  xtype: 'label'
              },
              {
                  xtype: 'checkboxgroup',
                  columns: 1,
                  vertical: true,
      
              }            
      ]});
      
      function createCheckboxesFromStore(store){
          var checkBoxGroup = Leftpanel.down('checkboxgroup');
          checkBoxGroup.removeAll();
          checkBoxGroup.add({
              itemId: 'allCheckbox',
              boxLabel: 'ALL',
              name: 'chkName',
              inputValue: 'all',
              checked: true,
              listeners: {
                   change: function (chbx, newValue) {                                        
                       console.log("Changed ALL to ", newValue);
                       if(newValue){  //If ALL is selected, select every checkbox                                   
                           var allCheckboxes = this.up('checkboxgroup').query("checkbox"); //Array of all checkboxes
                           for (var i = 0; i < allCheckboxes.length; i  ) {
                               allCheckboxes[i].setValue(true);                                         
                           }
                       }
      
                   }   
              }
          });
      
          //Create one checkbox per store item
          store.each(function(record){
              checkBoxGroup.add({
                  boxLabel: record.get('Id'),
                  name: 'chkName',
                  inputValue: record.get('Name'),
                  checked: true,
                  listeners: {
                      change: function (chbx, newValue) {
                          console.log("Changed ", chbx.inputValue, " to ", newValue);
                          var checkboxGroup = this.up('checkboxgroup'),
                              checkedBoxes = checkboxGroup.getChecked(), //Array of checked checkboxes
                              selectedValues = []; //Array of selected values                                       
      
                          //If we uncheck one, also uncheck the ALL checkbox
                          if(!newValue) checkboxGroup.down("#allCheckbox").setValue(false);
      
                          for (var i = 0; i < checkedBoxes.length; i  ) {
                              selectedValues.push(checkedBoxes[i].inputValue); //Add each inputValue to the array                                       
                          }                                                                        
                          Store1.filterBy(function(record){
                             //If all was selected or if the name is included in the selectedValues, include the item in the filter
                             return Ext.Array.contains(selectedValues, record.get('Name'));                                         
                          });
                      }                                
                  }
              });
          });
      }
      

      這也是測試和工作:).如果你需要它,我可以通過jsfiddle鏈接運行代碼(告訴我).

      干杯,來自玻利維亞拉巴斯

      來源:https://www./content-1-337301.html

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約