【问题标题】:ExtJS4 Changing data store parametersExtJS4 更改数据存储参数
【发布时间】: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 模式吗? (即这背后有控制器吗?)

标签: javascript extjs extjs4 javascript-framework


【解决方案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?
  • 对于分页工具栏,它应该使用最后设置到商店的参数。因此,您不想更改参数,除非通过您制作的过滤器。我错了吗?
  • 你是对的!我只需要确保在加载前更新了参数,并且它工作得很好。再次感谢约翰!
猜你喜欢
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2012-05-23
  • 2015-03-01
  • 2012-05-16
相关资源
最近更新 更多