我正在尝试使用 ExtJS 构建搜索应用程序。我创建了虚拟表单来搜索个人详细信息。我有一个连接到 mysql DB 的 php 脚本。我能够将表单参数传递给 php 并能够在 msg 框中获取返回结果。但我不明白如何将它传递给在 MVC 的网格中存储和显示相同的内容。我试图将 php 的返回数据传递给存储,然后在控制器中调用 Grid (List.js)。仍然没有工作。onSearchButtonClick
我已经展示了我用来执行此操作的所有代码。我有另一个疑问,在控制器的存储和功能中使用代理代码部分(即 url:app/scripts/Info.php)是否必不可少?因为我可以直接传递返回值来存储onSearchButtonClick
功能,我希望不是必须在两个地方都连接php脚本。但是,如果专家能澄清这一点,那就太好了。
以下是我的店铺:
Ext.define('App.store.Info', {
extend: 'Ext.data.Store',
model: 'App.model.Info',
alias: 'widget.infostore',
pageSize : 50,
autoLoad : false,
remoteFilter: true,
proxy :{
type : 'ajax',
url : 'app/scripts/Info.php',
reader : {
type : 'json',
root : 'result',
successProperty : 'success'
}
},
listeners: {
load : function(store) {
store.each(function(record) {
record.commit();
});
}
}
});
我的模型看起来很完美,只是为了减少我没有放在这里的代码
这是我的网格:
Ext.define('App.view.info.List' ,{
extend: 'Ext.grid.Panel',
alias : 'widget.infolist',
store : 'Info',
initComponent: function(){
this.columns = [
{header:'PID',dataIndex:'pid'},
{header:'Name',dataIndex:'name'},
{header:'Address', dataIndex:'address'},
{header:'Contact', dataIndex:'contact'}
];
this.callParent(arguments);
}
});
这是我的 php 脚本返回的内容:
{'success':true, 'result':{'pid':'100','name':'Suman','address':'Bangalore','contact':'suman@xyz.com'}}
这是控制器:
Ext.define('App.controller.Info', {
extend: 'App.controller.Base',
models: ['Info'],
stores: ['Info'],
views: [
'info.Index',
'info.List'
],
refs: [{ref: 'info',selector: 'info'}],
init: function(){
console.log('Main controller init');
this.control({
'button[action=search]':{
click: this.onSearchButtonClick
}
});
},
onSearchButtonClick:function(){
var form = Ext.getCmp('ppanel');
if(form.getForm().isValid()){
Ext.Ajax.request({
waitMsg: 'Searching...',
method: 'POST',
url: 'app/scripts/Info.php',
params: {
searchData: Ext.encode(form.getValues())
},
scope:this,
success: this.onSearchSuccess,
failure: this.onSearchFailure
//Ext.MessageBox.alert("XXXXX","dat");
});
}
},
onSearchSuccess: function(response){
var gData = Ext.JSON.decode(response.responseText);
//var grid = Ext.widget('infolist'); //not working -need help
this.getInfoStore().load(gData);
//Ext.getCmp().setActiveItem('infolist'); //not working-need help
//this.getViewport().getLayout().setActiveItem('infolist'); //not working need help
Ext.MessageBox.alert("XXXXX",response.responseText); //works
},
onSearchFailure: function(err){
Ext.MessageBox.alert('Status', 'Error occured during searching...');
}
});
我希望我已经提供了理解问题所需的信息。期待某种帮助。