首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用新参数ExtJs Ext.data.JsonStore重新加载json存储

使用新参数ExtJs Ext.data.JsonStore重新加载json存储
EN

Stack Overflow用户
提问于 2010-07-19 07:35:45
回答 3查看 45.9K关注 0票数 27

我目前在使用新参数重新加载json存储时遇到了麻烦。这是我的店铺:

代码语言:javascript
复制
 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' } );仍然将参数视为空字符串。

最后,从我尝试过的手册中可以看出:

代码语言:javascript
复制
lastOptions = newsletters.lastOptions;
Ext.apply(lastOptions.params, {
    to: 'test1',
    from: 'test2'
});
newsletters.reload(lastOptions);

这也不会使用更新后的参数请求/newsletters。

任何建议都很感谢!

EN

回答 3

Stack Overflow用户

发布于 2010-07-27 03:41:55

您实际上可以将params对象传递给load()方法

代码语言:javascript
复制
newsletters.load({
  params: {to: 'test1', from: 'test2'}
})
票数 30
EN

Stack Overflow用户

发布于 2010-07-19 15:08:17

从文档中,您可能可以这样做:

代码语言:javascript
复制
store.setBaseParam('to', dateTo);

现在,如果我理解正确的话,您希望在dateTo和dateFrom发生更改时更改您的baseParams。

您可以尝试:

代码语言:javascript
复制
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();
票数 5
EN

Stack Overflow用户

发布于 2012-10-28 05:27:07

我的问题是:我有一个通过代理向后端请求数据的存储。此请求应包含一个名为filter的参数,该参数将帮助后端确定客户端感兴趣的结果集。该参数是从Combobox或其他组件加载的,用户可以使用这些组件来表示应该使用哪个过滤器。

在我看来,参数不应该设置为Store,也不应该使用load参数。我会解释原因:

  1. 将参数配置到存储区将意味着使用同一存储区的每个其他组件都将配置此参数,这意味着您可能会遇到并发问题。
  2. 在第二种情况下,将其配置为覆盖load方法并不有趣,因为您不希望每次显式使用load方法时都自己使用它,请记住,已经有一些组件触发了此方法,如分页和自定义组件。

从我的角度来看,什么是正确的方式:

每次触发load时,我们只需以非侵入性的方式附加额外的参数。这意味着触发器将不需要进行任何更改(记住,这里的触发器可以是执行store.load()的任何组件),并且存储不应该知道这个新参数。

在这里您可以清楚地看到,这应该是在向代理请求数据之前完成的操作,在我的示例中,我将其实现为beforeload事件的侦听器。在执行beforeload时,我只是将新参数聚合到与documentation对应的侦听器的操作参数中:beforeload( store, operation, eOpts )。最终的实现类似于:

代码语言:javascript
复制
store.on({
    beforeload: function (store, operation, opts) {
        Ext.apply(operation, {
            params: {
                filterName: Ext.getCmp('filterCombo').getValue()
            }
       });
    }
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3277682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档