2012-03-13 139 views
11

我使用下面的代碼:如何將參數傳遞給Ext.data.Store?

var genres1 = new Ext.data.Store({ 
    reader: new Ext.data.JsonReader({ 
     fields: ['pincode','place_name'], 
     root: 'rows' 
    }), 
    proxy: new Ext.data.HttpProxy({ 
     url: 'pointalong.php', 
     method: 'GET' 
    }) 
}); 

,但我想通過3個參數,以我的PHP文件。我應該如何處理?並且我怎麼會在PHP文件。

回答

17

有兩種可能性。第一種是使用商店baseParams配置:

var genres1 = new Ext.data.Store({ 
    baseParams: { 
     param1: 'value1', 
     param2: 'value2' 
    }, 
    // ... 

第二個是給他們當您使用load方法:

genres1.load({params: {param2: 'anotherValue'}}); 

注意PARAMS將覆蓋任何baseParams同名

因此,如果您在上面的示例中使用baseParams設置商店,然後使用帶參數的load,商店將請求...?param1=value1&param2=anotherValue


...以及如何我會得到在PHP文件

由於通過URL參數傳遞平常變量 - 使用$_GET

$param1 = $_GET['param1']; 
+5

@Sudhir如果您正在使用ExtJS的4你將要使用「extraParams」配置選項,你會使用它的代理,而不是商店本身。你正在使用什麼版本的ExtJs? – Justin 2012-03-13 06:51:34

14

我用這個和它完美的作品

Ext.define('store.odon.DiagnosticoStore', { 
extend : 'Ext.data.Store', 
model : 'model.odont.DiagnosticoModel', 
    proxy: { 
    type: 'ajax', 
    api: { 
     create: CONTEXT_PATH + '/mvc/odona/crear', 
     read: CONTEXT_PATH + '/mvc/odon/lista', 
     update: CONTEXT_PATH + '/mvc/odon/update', 
     destroy: CONTEXT_PATH + '/mvc/odon/delete' 
    }, 
    reader: { 
     type: 'json', 
     root: 'diagnosticos', 
     successProperty: 'success' 
    }, 
    writer: { 
     type: 'json', 
     writeAllFields: true, 
     encode: true, 
     root: 'diagnosticos' 
    } 
} 
}); 

的參數被分配給裝載存儲

var storeDiagnostico= getStore(); // Ext.create('store.odon.DiagnosticoStore'); 
     storeDiagnostico.getProxy().setExtraParam("idOdontologia", value); 
     storeDiagnostico.load(); 
4

如果參數的值可能會改變(例如,如果它來自另一個表單字段),則最可靠的方法是之前應用該代理參數每次存儲加載Load事件,如下所示:

Ext.create('Ext.data.Store', { 
    ... 
    listeners:{ 
     beforeload: function(store){ 
      var filterText = Ext.getCmp('filterText').value; 
      store.getProxy().setExtraParam("filterText", filterText); 
     } 
    },