Extjs 3.4 自定义 JSONReader
Posted
技术标签:
【中文标题】Extjs 3.4 自定义 JSONReader【英文标题】:Extjs 3.4 custom JSONReader 【发布时间】:2012-12-23 10:28:34 【问题描述】:我已经很久没有问题了,但我终于在这里碰壁了。无论如何,让这变得容易。我正在尝试在 extjs 3.4 中创建一个 JSON 存储(与工作相关,不,我没有更新)。 好吧,我像往常一样创建了带有正确响应的查询并填写了它。我的问题是我希望能够在应用程序上提取和使用 JSON 上的 1 个额外属性。 来自 chrome 响应对象的 JSON 示例:
myInventory: [Priority:1, PMNumber:444, Description:fix-a-tape, Assets:3, Storage_Count:0,…,…]
percent: 97.040498442368
totalCount: "3"
现在,我知道这是正确的格式,因为我正在使用的 Grid 已填充,但我无法获得 percent 属性。所以我的问题是,当你有一个在 EXTjs 上不常见的额外参数时,你如何在数据存储构建代码块上提取一个额外的参数,在我的例子中是百分比? 我尝试在 JSONReader 上进行元更改,但在创建数据存储后检查数据存储时,我得到的只是属性的 percent:"percent"。
【问题讨论】:
我知道我可以做另一个查询,然后是一个单独的数据存储,但我认为这是一种浪费。我应该能够向商店添加一个参数,以便在网格中使用,或者在另一个使用数据库中的动态数据的元素中使用。 【参考方案1】:Ext.data.JsonReader 有一个属性jsonData,这正是您所需要的。一个简单的例子:
Ext.onReady(function()
var store = new Ext.data.JsonStore(
url: 'data/test.json',
root: 'dataRoot',
fields: ['fieldA', 'fieldB'],
idProperty: 'id',
storeId: 'myStore'
);
store.on('load', function(store)
console.log(store.reader.jsonData.someOtherProperty);
);
store.load();
);
data/test.json 看起来像这样:
dataRoot: [
id: 0,
fieldA: 'a',
fieldB: 'b'
],
someOtherProperty: 'abc'
还有一种替代方法,您可以手动(不是通过 store.load())执行 Ext.Ajax 请求,使用您需要的属性,然后使用从 Ajax 请求中获得的数据手动调用 Ext.data.JsonStore.loadData()。
【讨论】:
我已经试过了。我可以看到来自 JSON 的数据并正确格式化,但仍然没有“otherProperty”可用。我一直在搞乱 JSON 的元数据属性,我有点让它工作,但这还不是答案,因为我没有在网格 ATM 上显示任何东西。感谢您的指点,尽管我在 5 天前已经有了同样的想法。以上是关于Extjs 3.4 自定义 JSONReader的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ExtJS JSONReader 读取不可迭代的参数