ExtJS4 更改数据存储参数

Posted

技术标签:

【中文标题】ExtJS4 更改数据存储参数【英文标题】:ExtJS4 Changing data store parameters 【发布时间】:2012-02-18 22:50:37 【问题描述】:

如果我在这样的网格上有一个数据存储:

store = Ext.create('Ext.data.Store', 
    fields: [
        name: 'id'
    , 
        name: 'filename'
    
    // other fields here ...
    ],
    proxy: 
        type: 'ajax',
        url: 'http://myniftyurl.com/blah',
        simpleSortMode: true,
        reader: 
            type: 'json',
            totalProperty: 'total',
            root: 'result'
        ,
        extraParams: 
            'limit': Ext.get('itemsPerPage').getValue(),
                'to': Ext.get('to_date').getValue()
            //  other params
        
    ,
    model: 'Page',
    remoteFilter: true,
    remoteSort: true
);

'limit' 和 'to' 值会根据用户输入而改变,这就是问题所在。数据存储继续使用原始参数而不是新输入。我该如何解决这个问题?

提前致谢!

【问题讨论】:

你在使用 MVC 模式吗? (即这背后有控制器吗?) 【参考方案1】:

我通常通过在控制器中执行 store.load() 手动加载我的网格。

在此之前,我可以像这样更改商店的参数:

//getForm() retrieves the Ext.basic.Form (from Ext.panel.Form)
var params = this.getForm().getValues();

//Write over
grid.getStore().getProxy().extraParams = params;

//load
grid.getStore().load();

我正在使用缓冲网格,这需要大量返工才能在 4.0.7 中完全正常工作。但这应该对你有用。

另一种选择是使用beforeload 侦听器,但我不确定到那时更改 extraParams 是否会做任何事情。您也许能够修改传递给事件处理程序的 Ext.data.Operation 对象?

让我知道你的效果如何。

祝你好运!

【讨论】:

手动调用 store.load() 有效,谢谢!我意识到最大的问题是分页工具栏上的按钮。如何更改点击事件,以便我可以像上面演示的那样手动调用 load? 对于分页工具栏,它应该使用最后设置到商店的参数。因此,您不想更改参数,除非通过您制作的过滤器。我错了吗? 你是对的!我只需要确保在加载前更新了参数,并且它工作得很好。再次感谢约翰!

以上是关于ExtJS4 更改数据存储参数的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS4 网格不会更新远程数据库

无法从gridpanel extjs4 MVC中的存储加载数据

ExtJs4 - 存储 baseParams 配置属性?

无法在 ExtJS4 中加载组合存储

Extjs4 localstorage -- 如何删除所有记录?

ExtJS 4.2.1 - 从服务器收到错误后拒绝存储中的更改