从ExtJS 4中的存储重新加载数据

从ExtJS 4中的存储重新加载数据,extjs,grid,refresh,store,reload,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/re

我有一家商店:

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.getCmp('myGridID').getStore().load();
Ext.getCmp('myGridID').getView().refresh();
我还尝试将存储设置为Ext.data.JsonStore,但它什么也不做

但是什么都不管用,我一直在互联网上搜索,但都没有成功


非常感谢您的帮助。

这肯定会奏效:

Ext.getCmp('myGridID').getStore().load();
当您使用上述语法时,是否出现任何javascript错误?如果是这样,查看特定的错误消息可能会提供一些线索

此外,请始终使用Chrome开发者工具(如果您喜欢Firefox/IE,请使用Firebug或IE开发者工具栏)。在本例中,您希望查看AJAX请求是否发送到/url/to/my/json/encoded/results。这至少会告诉您刷新存储的呼叫是否正在发送到您的服务器

我的猜测是不是,你很可能有一个错误消息正在生成。可能类似于“无法调用未定义的'getStore'方法”

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

您可以将一些信息输出到Chrome developer tools控制台以帮助调试,首先是:

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

如果它成功返回对网格组件的引用,则继续执行以下操作:

console.log(Ext.getCmp('myGridID').getStore());
不管怎么说,对于你现在可能已经解决的问题,这可能是太多的解释了。不过,这可能会对其他人有所帮助。

请参阅我的代码:

var response=Ext.decode(结果);//来自某处的JSON

store.proxy=new Ext.ux.data.PagingMemoryProxy(响应)

grid.store=store

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

grid.getView().refresh()


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

 Ext.getCmp('idMyGrid').getStore().load();
 Ext.getCmp('idMyGrid').getView().refresh();
这是我的工作。我希望这对你也有用

来自智利的乔里佐, Saluds.

试试这个它对我很有效 在版本3.x上测试

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

你也可以使用

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

如果要通过加载存储请求传递参数

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


当您尝试运行时会发生什么:
myGrid.getStore().load()
Ext.getCmp('myGridID').getStore().load()
应该可以工作也许它确实可以重新加载存储,但是我仍然必须重新加载网页才能在网格中看到新记录
Ext.getCmp('myGridID')。getView().refresh()
应该可以工作。也许它确实可以重新加载存储,但是我仍然必须重新加载网页才能在网格中看到新记录