2012-03-13 56 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); 
     } 
    },