我有一个网格面板,我在 initComponet 函数中创建存储,例如
,initComponent: function() {
var store = Ext.create('Ext.data.Store', {
model: 'MyObject',
autoLoad: false,
pageSize:22,
remoteSort:true,
proxy: {
type: 'ajax',
url: 'example.php',
reader: {
type: 'json',
totalProperty: 'total',
root: 'results'
}
}
});
this.store = store;
this.dockedItems = [{
xtype: 'pagingtoolbar',
store: this.store,
displayMsg: '{0} - {1} / {2}',
emptyMsg: 'empty',
dock: 'bottom',
displayInfo: true,
pageSize: 22
}];
this.callParent(arguments);
this.store.load({params:{start:0, limit:22}});
}
我使用一些值进行表单搜索,当我按下搜索按钮时,我将执行以下代码
grid.store.load({
params:{
start:0,
limit:22,
signalSearch: 1,
search1: myValue1,
search2: myValue2,
}
});
在我的 php 文件中将捕获它以知道这是搜索
if ( have $_REQUEST["signalSearch"]) {
// print json with condition search
}else {
// print json with all data
}
结果返回 2 页(很好)。但是,当我按“下一页”按钮查看第 2 页上的一些结果时,我的商店加载失败(我认为当我按“下一页”按钮
时他们会调用
store.load({params:{start:0, limit:22}});
,并且在我的 php 文件中,该文件将在其他情况下运行)。
这不是电话
grid.store.load({
params:{
start:0,
limit:22,
search1: myValue1,
search2: myValue2,
}
});
我的搜索想法不好?我该如何解决这个问题谢谢
如果您在商店的“加载”功能中使用参数,这些参数仅引用单个请求,因此如果您单击工具栏的下一页,您将不会发布 signalSearch 参数。 您应该在加载前事件上注册一个自定义侦听器并添加您的参数:
initComponent: function(){
....
this.callParent(arguments);
this.store.addListener('beforeload', function(store, operation){
Ext.apply(operation.params, {
signalSearch: 1 // Or you could make conditions if apply this search param
});
return true;
}, this);
}