我目前无法使用新参数重新加载json商店。这是我的商店:
newsletters = new Ext.data.JsonStore({
url: '/newsletters/',
root: 'results',
fields: [
'id',
'body'
'recipients'
],
baseParams: { command: 'json', to: dateTo, from: dateFrom },
autoLoad: true
});
dateTo和dateFrom是最初为空的字符串(''),并使用正确的参数调用firebug / newsletters。
现在没有以下技术工作:
更改dateTo和dateFrom的值然后调用newsletters.reload()仍调用带有和来自空字符串的参数的页面。
调用newsletters.reload( { to: 'test1', from: 'test2' } );
仍然会将参数视为空字符串。
最后从我尝试过的手册开始:
lastOptions = newsletters.lastOptions;
Ext.apply(lastOptions.params, {
to: 'test1',
from: 'test2'
});
newsletters.reload(lastOptions);
这再次没有使用更新的参数请求/简报。
任何建议表示赞赏!
答案 0 :(得分:29)
您实际上可以将params对象传递给load()方法
newsletters.load({
params: {to: 'test1', from: 'test2'}
})
答案 1 :(得分:5)
从文档中,您可以这样做:
store.setBaseParam('to', dateTo);
现在,如果我理解正确,您希望每当更改dateTo和dateFrom时都更改baseParams。
你可以尝试:
var dateTo = '', dateFrom = '';
store.on('beforeload', function(s) {
s.setBaseParam('to', dateTo);
s.setBaseParam('from', dateFrom);
});
// This should work :
dateTo = 1;
dateFrom = 2;
store.load();
答案 2 :(得分:4)
我的问题是:我有一个商店,它将通过代理请求数据到后端。此请求应包含一个名为filter
的参数,该参数将仅帮助后端确定客户端感兴趣的结果集合。此参数从Combobox
或其他某个组件加载用户可以用来表示应该使用哪个过滤器。
从我的角度来看,参数不应该设置为Store,也不能使用load参数。我将解释原因:
load
方法,记住已经有了一些组件,如分页和触发此方法的自定义组件。从我的角度来看,正确的方法是什么:
每次触发load
时,我们只会以非侵入方式附加其他参数。这意味着触发器不需要进行任何更改(请记住,此处触发器可以是执行store.load()
的任何组件),并且存储器不应该知道此新参数。
您可以清楚地看到,这应该是在请求数据到代理之前完成的操作,在我的情况下,我实现为beforeload
事件的监听器。执行beforeload
时,我只是将新参数聚合到根据documentation的侦听器的操作参数:beforeload( store, operation, eOpts )
。最终的实现类似于:
store.on({
beforeload: function (store, operation, opts) {
Ext.apply(operation, {
params: {
filterName: Ext.getCmp('filterCombo').getValue()
}
});
}
});