2017-10-03 1 views
0

extjs를 사용하여 테이블을 만들었습니다. 여기에는 세 개의 열, 전자 메일 및 자동차이 있습니다. extjs에는 기본 정렬 방법이 있습니다. 여기에 나는이 세 열 모두에 대한 검색 방법을 추가하여 이름, 전자 메일 및 자동차를 사용하여 검색 할 수도 있습니다. 아래 코드에서 어떤 변경이 필요합니까? Below that arrow mark i need toget the search Filter 예상되는 출력은 각 열 아래에서 검색 필터 옵션을 가져와야합니다.EXTJS에서 검색 필터를 추가하는 방법

Ext.define('ViewerModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.viewermodel', 

    stores: { 

     mystore: { 

      fields: ['name', 'email', 'cars'], 
      data: { 
       'items': [{ 
        'name': 'Lisa', 
        "email": "[email protected]" 
       }, { 
        'name': 'Bart', 
        "email": "[email protected]" 
       }, { 
        'name': 'Homer', 
        "email": "[email protected]" 
       }, { 
        'name': 'Marge', 
        "email": "[email protected]" 
       }] 
      }, 

      proxy: { 
       type: 'memory', 
       reader: { 
        type: 'json', 
        rootProperty: 'items' 
       } 
      } 
     } 

    } 
}); 

Ext.define('APP.HorizontalBox', { 
    extend: 'Ext.container.Container', 
    requires: ['Ext.layout.container.HBox'], 
    xtype: 'layout-horizontal-box', 
    width: 750, 
    height: 300, 
    layout: { 
     type: 'hbox', 
     align: 'stretch' 
    }, 
    bodyPadding: 10, 

    defaults: { 
     frame: true, 
     bodyPadding: 10 
    }, 
    viewModel: { 
     type: 'viewermodel' 
    }, 

    items: [{ 
     xtype: 'grid', 
     title: 'Grid: click on the grid rows', 
     itemId: 'myGridItemId', 
     flex: 1.2, 
     margin: '0 10 0 0', 
     bind: { 
      store: '{mystore}', 
      selection: '{users}' 
     }, 
     columns: [{ 
      text: 'Name', 
      dataIndex: 'name', 
      flex: 0.5 
     }, { 
      text: 'Email', 
      dataIndex: 'email', 
      flex: 1 
     }, { 
      text: 'Cars', 
      dataIndex: 'cars', 
      flex: 1 
     }], 

     dockedItems: [{ 
      xtype: 'toolbar', 
      dock: 'top', 
      items: [{ 
       xtype: 'button', 
       padding: '2 5 2 5', 
       text: 'Edit item', 
       handler: function (btn) { 
        var grid = btn.up('grid'); 
        var selectedRow = grid.getSelectionModel().getSelection()[0]; 
        var janela = Ext.create('APP.MyWindow', { 
         animateTarget: btn.getEl(), 
         //EDITED 
         viewModel: { 
          data: { 
           users: selectedRow 
          } 
         } 
        }).show(); 
       } 
      }] 
     }], 
    }, { 
     xtype: 'form', 
     title: 'View', 
     itemId: 'panelbindItemId', 
     flex: 1, 
     margin: '0 10 0 0', 
     defaults: { 
      labelWidth: 50 
     }, 
     items: [{ 
      xtype: 'displayfield', 
      margin: '20 0 0 0', 
      fieldLabel: 'Name', 
      bind: '{users.name}' 
     }, { 
      xtype: 'displayfield', 
      fieldLabel: 'Email', 
      bind: '{users.email}' 
     }] 
    }] 
}); 

Ext.define('APP.MyWindow', { 
    extend: 'Ext.window.Window', 
    alias: 'widget.mywindow', 

    reference: 'windowreference', 

    title: 'MyWindow | Edit record', 
    closable: true, 
    modal: true, 
    padding: '10px', 
    height: 150, 
    layout: 'fit', 

    initComponent: function() { 
     var me = this; 

     Ext.apply(me, { 

      items: [{ 
       xtype: 'form', 
       layout: 'anchor', 
       defaults: { 
        padding: '5 0 5 0' 
       }, 
       items: [{ 
        xtype: 'textfield', 
        margin: '10 0 0 0', 
        fieldLabel: 'Name', 
        bind: '{users.name}' 
       }, { 
        xtype: 'textfield', 
        fieldLabel: 'Email', 
        bind: '{users.email}' 
       }] 
      }] 
     }); 

     me.callParent(arguments); 

    } 
}); 

Ext.application({ 
    name: 'Fiddle', 
    launch: function() { 
     Ext.create('APP.HorizontalBox', { 
      renderTo: document.body, 
      width: 750, 
      height: 400, 
      title: 'Title' 
     }); 

    } 
}); 
+0

합니까 [예] (http://docs.sencha.com/extjs/4.2.1/#!/example/grid-filtering/grid-filter-local.html) 당신은 무엇을해야합니까? – chrisuae

+0

@chrisuae 정확히 ....하지만 내 코드를 변경하는 방법. 공유 한 예는 혼란 스럽습니다. –

답변

0

또한이 코드를 사용하여 날짜를 사용하여 데이터를 검색 할 수 있습니다.

listeners: { 
       afterrender: function() { 
        var menu = Ext.ComponentQuery.query('grid')[0].headerCt.getMenu(); 
        menu.add([{ 
      xtype:'datefield', 
      name:'date1', 
      fieldLabel:'Filter By', 
      format: 'y-m-d', 
      listeners:{ 
       renderer: Ext.util.Format.dateRenderer('y-m-d'), 
         field:{ xtype:'datefield', 
           autoSync:true, 
           allowBlank:false, 
           editor: new Ext.form.DateField(
             {format: 'y-m-d'}) } 
      } 
     } 
2

당신은 예를 들어 그리드의 afterrender 이벤트 (.이 post을 참조)에서 수행 할 수 있습니다

listeners: { 
       afterrender: function() { 
        var menu = Ext.ComponentQuery.query('grid')[0].headerCt.getMenu(); 
        menu.add([{ 
         text: 'Search', 
         iconCls: 'x-fa fa-home', 
         handler: function() { 
          console.log("Search Item"); 
         } 
        }]); 
       } 
      } 

확인이 Fiddle을.

+0

내 질문에 답하기 위해 귀중한 시간을 보내 주셔서 대단히 감사합니다. –

+0

코드가 맞지만 그 버튼을 사용하여 검색하고 싶습니다. 작동해야합니다. –

+0

upvote에 감사드립니다. 사실, 열 메뉴에서 검색 항목이 필요하다는 질문을 해석했습니다. –

2

은 당신은 무엇을 검색하면 FiltersFeature이며, 다음과 같이 사용법은 다음과 같습니다

xtype:'grid', 
... 
features:[{ 
    ftype: 'filters', 
    local: true, 
    filters: [{ 
     type: 'string', 
     dataIndex: 'name' 
    }, { 
     ... (one definition for every column you want to allow filtering one) 
    }] 
}] 

추가 requiresmaybe even load Ext.ux, as can be found in the last comment을 가지고 있습니다. 다른 독자는 FiltersFeature가 ExtJS4에만 해당되며 has been moved around for ExtJS 5 and 6이라는 점에 유의하십시오.

+0

@Alexander ............ 선생님, 저에게 자세히 설명해 주시겠습니까? –

관련 문제