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

mar*_*ins 6 grid extjs store refresh 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'
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

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

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

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

我试过了:

Ext.getCmp('myGridID').getStore().reload();
Run Code Online (Sandbox Code Playgroud)

和...

Ext.getCmp('myGridID').getStore().load();
Run Code Online (Sandbox Code Playgroud)

和...

Ext.getCmp('myGridID').getView().refresh();
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助表示赞赏.

小智 16

这绝对有效:

Ext.getCmp('myGridID').getStore().load();
Run Code Online (Sandbox Code Playgroud)

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

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

我的猜测是,它不是,你很可能会生成一条错误消息.可能是"不能调用方法'getStore'未定义"的内容

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

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

console.log(Ext.getCmp('myGridID'));
Run Code Online (Sandbox Code Playgroud)

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

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

console.log(Ext.getCmp('myGridID').getStore());
Run Code Online (Sandbox Code Playgroud)

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


Moh*_*neh 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}});