grid store를 load하기 위한 일반적인 방법은 button 등의 action에 grid.store의 속성을 지정하여 grid.store.load()를 실행시킨다.
grid.store의 속성으로는 store.proxy.url을 지정하고 load()함수를 호출하면 proxy가 url을 호출 할 때 GET 방식을 사용한다.
Ext.define('GridList_Model',{ extend: 'Ext.data.Model', proxy: { type: 'ajax', reader: 'json' }, fields: [ 'field1','field2','field3','field4','field5','field6','field7','field8' ] }); // create the Data Store var GridList_store = Ext.create('Ext.data.Store', { model: 'GridList_Model', autoLoad: false, proxy: { type: 'ajax', url: '/query/JSON_GRID1.jsp', reader: { type: 'json' } } }); GriList_store.on('load', function(){ AfterGrid(); }); // create the grid var GridMasterList = Ext.create('Ext.grid.Panel', { id: 'GridList', // data of this grid comes from 'GridList_store' store store: GridList_store, columnLines: true, ... } // end of grid definition Ext.create('Ext.form.FormPanel', { width: 1024, id: 'SearchForm', margin: '0 0 10 0', xtype: 'fieldset', layout: 'column', border: 1, items: [{ xtype: 'datefield', fieldLabel: '기준날짜', format: 'Y-m-d', id: 'BaseDate1', maxLength:10, width:300 , ...
GET 방식은 URL에 parameter를 붙여 전송하는 방식이다.
// form submit button definition.... xtype: 'button', id: 'OkButton', width: '120', height: '30', margin: '10px 10px 10px 10px', handler: function() { var date1 = Ext.getCmp('BaseDate1'); var baseday = date1.getSubmitValue().replace("/g", "-"); baseday = baseday.replace(/-/g, ""); var name = Ext.getCmp('Name').value(); var addr = Ext.getCmp('Address').value(); Ext.getCmp('GridList').show(); // store : store of grid. store is data part of 'GridList' grid... var store = Ext.getCmp('GridList').getStore(); // add parameter to url with '?' and '&' parameter... // : url = 'http://www.xxx.com/query.jsp?data1=Hi&data2=Hello&data3=world store.proxy.url = "/query/JSON_GRID1.jsp?DATE="+baseday+'&NAME=' + name + '&ADD=' + addr;; store.load(); }, text: '검색'
Form의 Field가 많은 경우 field를 모두 parameter를 모두 url로 지정해야 한다. 그런데 ajax로 서버에 request를 보내는 경우 꼭 GET 방식만 보낼 수 있는 것이 아니다. POST 방식도 가능하다. ExtJs API에는 나와있지 않지만 POST 방식으로 데이터를 보내면 URL이 간단하고 여러개의 parameter를 실수 없이 보낼 수 있다.
xtype: 'button', id: 'OkButton', width: '120', height: '30', margin: '10px 10px 10px 10px', handler: function() { var frm = this.up('form').getForm(); var values = frm.getValues(); // values is object ( 'values' is record type ) // parameters are object's record Ext.getCmp('GridList').show(); var store = Ext.getCmp('GridrList').getStore(); store.proxy.url = "/query/JSON_GRID1.jsp"; // change actionMethod.read as POST store.proxy.actionMethods.read = "POST"; // ajax parameters are form field values...(Object) store.proxy.extraParams = values; store.load(); }, text: '검색'
POST 방식으로 보내면 당연히 각 parameter를 일일이 지정하지 않아도 form에 있는 모든 field 가 전달되므로 쉽고 편리하다.store.proxy.extraParams에 ‘values’ Object를 지정하고 actionMethods.read를 POST로 지정하여 store.load()를 실행하면 Server측에는 data가 POST 방식으로 전달된다. 이 때 Server측에 전달되는 변수 명은 각 field의 id 이다.