从ExtJS 4中的商店重新加载数据

时间:2012-01-19 22:09:58

标签: extjs grid refresh store reload

我有一家商店:

var store = new Ext.data.store({
                autoLoad: true,
                autoSync: true,
                model: 'myModel',
                proxy: {
                    type: 'rest',
                    url: '/url/to/my/json/encoded/results',
                    reader: {
                        type: 'json',
                        root: 'results'
                    },
                    writer: {
                        type:'json'
                    }
                }
            });

这是我显示这些结果的某个网格的商店。 我的网格配置如下:

var myGrid = new Ext.grid.Panel({
                id:'myGridID',
                layout:'anchor',
                border:false,
                title:'My Grid',
                width:412,
                store:store,
                heigth:300,
                frame:false,
                .... etc

在某些时候我添加了一个条目到我的数据库,它工作正常(如果我重新加载页面,我看到我的网格中新添加的记录)。 我想要做的是重新加载网格,这样当我将该条目保存到我的数据库中时,商店和网格会自行刷新并显示新添加的记录,而无需重新加载整个页面。

我试过了:

Ext.getCmp('myGridID').getStore().reload();

和...

Ext.getCmp('myGridID').getStore().load();

和...

Ext.getCmp('myGridID').getView().refresh();

我也尝试将商店设置为Ext.data.JsonStore,但它什么也没做。

但没有任何作用,我一直在互联网上搜索这个失败。

感谢任何帮助。

4 个答案:

答案 0 :(得分:15)

这绝对有效:

Ext.getCmp('myGridID').getStore().load();

使用上述语法时是否收到任何javascript错误?如果是这样,查看特定的错误消息可能会提供一些线索。

此外,始终使用Chrome开发人员工具(如果您喜欢Firefox / IE,则使用Firebug或IE Developer Toolbar)。在这种情况下,您想要查看AJAX请求是否要发送到/ url / to / my / json / encoded / results。这至少会告诉您刷新商店的电话是否正在进入您的服务器。

我的猜测是,它不是,您很可能会生成错误消息。可能是“无法调用方法'getStore'未定义”

的内容

这至少会让您知道您没有成功获得对网格的引用。从那里,检查以确保你没有为另一个元素或类似的东西复制“myGridID”。

您可以将一些信息输出到Chrome开发人员工具控制台以帮助调试,从以下开始:

console.log(Ext.getCmp('myGridID'));

查看它是否未定义,或返回对网格的引用。如果它未定义,那么您可能要么复制id,要么可能在实际创建组件之前尝试重新加载网格(在应用程序的更大上下文中查看代码将有助于确定)。

如果它成功返回对网格组件的引用,那么继续沿着这条线继续:

console.log(Ext.getCmp('myGridID').getStore());

无论如何,对于你现在可能已经解决的问题,这可能是太多的解释。也许这对其他人有帮助。

答案 1 :(得分:9)

试试这个对我有用 在版本 3.x

上测试
  

Ext.getCmp('idMyGrid')。store.load();

你也可以使用

  

Ext.getCmp('idMyGrid')。store.reload();

如果要使用加载存储请求传递参数

  

Ext.getCmp('idMyGrid')。store.load({params:{paramName:   paramValue}}); Ext.getCmp('idMyGrid')。store.reload({params:   {paramName:paramValue}});

答案 2 :(得分:2)

如果要重新加载数据,则必须查看更改。我的意思是,把这些代码放在一起:

 Ext.getCmp('idMyGrid').getStore().load();
 Ext.getCmp('idMyGrid').getView().refresh();

这对我有用。我希望这也适合你。

来自智利香肠, Saluds。

答案 3 :(得分:0)

看我的代码:

  

var response = Ext.decode(result); //来自某个地方的JSON

     

store.proxy = new Ext.ux.data.PagingMemoryProxy(response);

     

grid.store = store;

     

store.load({params:{start:0,limit:20}});

     

grid.getView()刷新();