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

Posted

技术标签:

【中文标题】从 ExtJS 4 中的存储重新加载数据【英文标题】:Reloading data from a store in ExtJS 4 【发布时间】:2012-02-14 14:05:59 【问题描述】:

我有一家商店:

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 但它什么也没做。

但没有任何效果,我一直在互联网上搜索这个没有成功。

感谢任何帮助。

【问题讨论】:

当你尝试运行时会发生什么:myGrid.getStore().load(); Ext.getCmp('myGridID').getStore().load(); 应该可以工作 也许它确实会重新加载商店,但我仍然必须重新加载网页才能在网格中看到新记录 Ext.getCmp('myGridID').getView().refresh() 应该可以工作。 也许它确实会重新加载商店,但我仍然必须重新加载网页才能在网格中看到新记录 【参考方案1】:

试试这个它对我有用 在版本 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】:

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

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

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

来自智利香肠, 问候。

【讨论】:

【参考方案3】:

查看我的代码:

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

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

grid.store = 商店;

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

grid.getView().refresh();

【讨论】:

【参考方案4】:

这绝对可以:

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

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

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

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

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

您可以将一些信息输出到 Chrome 开发者工具控制台以帮助调试,首先是:

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

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

如果成功返回了对网格组件的引用,那么继续往下走:

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

无论如何,对于您现在可能已经解决的问题,这可能解释得太多了。不过,也许它对其他人会有所帮助。

【讨论】:

以上是关于从 ExtJS 4 中的存储重新加载数据的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS 4:存储数据未填充存储加载回调函数中的数据

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

在 extjs 3.4 中刷新面板中的数据视图

当我重新加载网格和存储时,extjs 缓存具有相同名称的图片

在触发单击 Extjs 3.4 时重新加载 ComboBox 存储

ExtJS:重新加载数据存储而不重绘网格