【发布时间】:2015-04-18 20:12:32
【问题描述】:
我有一个带有商店的网格,该商店在启动应用程序时加载。我也有一个网格绑定到的表格。最初,网格显示所有记录。搜索表单允许用户过滤记录。初始加载和搜索 URL 不同。单击搜索时,我将商店代理上配置的 URL 动态更改为过滤器 URL,将表单值作为 extraParams 传递,然后加载商店。我看到发出了请求并返回了响应。但是,我的网格记录没有刷新。
//网格存储在initComponent中
this.store = Ext.create("Ext.data.Store",{
fields:["rptid", "text", "value", "date_created", "created_by", "active],
autoLoad:true,
proxy:{
type:"ajax",
url:"./getRpts.html",
reader:{
type:"json",
root:"data"
}
}
});
//搜索表单按钮的处理程序
this.getRPTGrid().getStore().getProxy().url = "./getFilteredReports.html";
this.getRPTGrid().getStore().getProxy().extraParams =
this.getSearchForm().getValues();
this.getRPTGrid().getStore().load();
就是这样。我确认正在发出请求以加载商店并确认在调试器中收到响应。 JSON 响应还包含“数据”根,所以这不是问题,字段也不会改变。我以前做过 10,000 次,但从未经历过。有人有什么想法吗?
我什至比较了两个请求的请求和响应标头,它们完全相同,但减去了 url 和参数..
【问题讨论】:
-
很奇怪,我希望这也能奏效。在您的商店的负载处理程序中尝试更新网格视图。所以 this.getRPTGrid().getView().refresh() 看看这是否会强制行渲染。
-
还有一件事,在您商店的负载处理程序中,插入断点并检查您的商店及其记录,在调用带有参数的新 url 后新的是否显示?
-
我已经尝试过 getView().refresh() 但没有运气。我在加载后添加了一个断点,看到第一次点击搜索,新记录不显示。但是,我第二次单击搜索时,它确实显示了 store.data.items 下的新记录...但网格再次没有刷新。
-
如果你遵循 extjs 的 MVC 模式。您需要从模型中动态更改它。正如我在回答中向您建议的那样。阅读this 文档,了解为什么需要模型来解决问题。这是关于您要向视图显示的数据绑定。使用模型,您可以根据需要动态提供数据模型。商店负责从与模型的结合中获取和保存数据。
-
所以我没有在 initComponent 中创建商店,而是在商店文件夹下创建了一个单独的商店类。然后在 initComp 我做了 this.store = "MyGridStore" 并且它起作用了....为什么?我完全不知道。
标签: javascript extjs