ExtJS json 存储未填充

Posted

技术标签:

【中文标题】ExtJS json 存储未填充【英文标题】:ExtJS json store not populating 【发布时间】:2014-08-29 17:07:57 【问题描述】:

我最近通过继承一个用 3.4 编写的 Web 应用程序深入研究了 ExtJS。我已经成功地创建了一个连接到网格的商店,并且能够调出一个 PanelForm,其中包含从对 php 页面的调用中加载的数据。

我定义了另一个 json 存储,当我调用它的加载过程时它没有被填充,我想知道我错过了什么。

商店的定义如下:

var ImgStore = new Ext.data.JsonStore(
 totalProperty: 'total'
,root: 'data'
,url : 'json/getProductImage/'        
,fields : [
    name : 'img'
,
    name : 'extn'
]
);

我加载数据的代码是:

ImgStore.load(callback: function()             
        ,params: 'ProductGUID': x
    );

URL 后面的代码很好,Firebug 中的响应如下:

"success":true,"data":"img":"iVBORw0KG...ggg==","extn":"png"

我无法理解为什么响应回来了,但商店没有填充。我肯定错过了什么;我只是看不到什么......

Store 是否必须绑定到另一个对象?我想做的是读回 base64 编码的字符串,然后在屏幕上显示图像(在面板、FormPanel 或容器上;真的不确定最好的方法)

非常欢迎任何建议。

【问题讨论】:

【参考方案1】:

您的商店需要一个模型。该模型需要反映随后在您的 JSON 提要中返回的属性。只有这样数据才会显示在您的商店中。

【讨论】:

3.4上不需要模型docs.sencha.com/extjs/3.4.0/#!/api/… 根据上述评论 - 我认为如果动态创建则不需要明确定义。【参考方案2】:

一切看起来都很好,除了 url 配置你不是缺少文件名吗? 'json/getProductImage/myfile.json'?

您如何通过将商店绑定到网格来验证商店未加载?因为如果是这样,商店可能正在加载但没有正确配置网格可能会让你认为商店没有加载,试试console.log(store.getTotalCount())

【讨论】:

否 - 这是一个包含 index.php 文件的目录。 Index.php 被设置为默认文档,因此在进入该文件夹时会被读取并触发。我有 25 个其他例子可以正常工作,所以我不认为是这样。关于验证 - 我使用了 console.log(ImgStore) 返回一个空对象。对另一个填充了数据的 JsonStore 的相同调用会返回可以浏览的对象。我没有将它绑定到网格;我的观点是,一个绑定到网格的创建正在工作,这还不是方法相同。 考虑到 js 是异步的,所以如果你使用 store.load() 并且在 console.log() 之后存储可能仍在加载 所以当你 console.log 时它仍然是空的,将文件名放在 url 中是一个好习惯。将 ImgStore.getTotalCount() 放入回调函数中。 ImgStore.getTotalCount() 不会在回调中触发......另外 - 我已经添加了一个成功和失败的处理程序,只是带有 console.log 但它也不会触发。奇怪的是,这是页面上唯一调用这个 php 文件的地方,如果我在 firebug 中放置一个断点并跨过代码,它确实会被触发。有点不对劲 真的应该考虑在url中添加index.php

以上是关于ExtJS json 存储未填充的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 JSON 填充 ComboBox ExtJS 4.2

ExtJS Grid Panel 没有从存储中填充数据

使用 hasMany 关联在 ExtJS 中填充存储

ExtJS:返回 json 存储中的总行/记录

如何使用 JSON 数据数组加载 extjs 3.4 存储