将JSON字符串放入存储
这里有一个简单的问题。如何将此JSON字符串放入Ext.data.Store将JSON字符串放入存储,json,extjs,Json,Extjs,这里有一个简单的问题。如何将此JSON字符串放入Ext.data.Store { "elements":[ { "element":{ "name":"value 1", "id":"element 1", "attributes":[ { "attrname":"id", "att
{
"elements":[
{
"element":{
"name":"value 1",
"id":"element 1",
"attributes":[
{
"attrname":"id",
"attrvalue":"This is the ID"
},
{
"attrname":"name",
"attrvalue":"This is the name"
},
{
"attrname":"description",
"attrvalue":"This is the description"
},
{
"attrname":"table_name",
"attrvalue":"This is the table"
}
]
}
}
}
这是我问题的简化版本:
干杯 由于JSON将从服务器返回,您需要做的第一件事是将它从JSON格式的字符串反序列化为一个可以导航的对象。假设它是有效的JSON,只需使用Ext.decode()即可 这将给出一个在“elements”键处具有对象数组的对象。只需在elements数组上循环,并创建一个可以插入到存储中的新模型实例 下面是一个链接,指向一个实例: 下面是该示例中的代码:
var data = YOUR_DATA_HERE,
var store = Ext.create('Ext.data.Store', {
fields: ['id', 'name', 'description', 'table_name'],
proxy: {
type: 'memory'
}
})
Ext.create('Ext.grid.Panel', {
title: 'Test Data',
store: store,
columns: [{
text: 'ID',
dataIndex: 'id'
}, {
text: 'Name',
dataIndex: 'name'
}, {
text: 'Description',
dataIndex: 'description'
}, {
text: 'Table Name',
dataIndex: 'table_name'
}],
renderTo: Ext.getBody()
});
var decoded = Ext.decode( data );
// loop over decoded data
for( var i=0; i<decoded.elements.length; i++ ) {
var element = decoded.elements[ i ].element;
// set implicit model
var model = {};
// loop over attributes
for( var x=0; x<element.attributes.length; x++ ) {
var attribute = element.attributes[ x ];
model[ attribute.attrname ] = attribute.attrvalue;
}
// implicitly cast data as Model
store.add( model );
}
var data=此处为您的数据,
var store=Ext.create('Ext.data.store'{
字段:['id','name','description','table_name'],
代理:{
键入:“内存”
}
})
Ext.create('Ext.grid.Panel'{
标题:“测试数据”,
店:店,,
栏目:[{
文本:“ID”,
数据索引:“id”
}, {
文本:“名称”,
数据索引:“名称”
}, {
文字:“说明”,
数据索引:“说明”
}, {
文本:“表名”,
dataIndex:'表名称'
}],
renderTo:Ext.getBody()
});
var decoded=Ext.decode(数据);
//循环解码数据
对于(var i=0;iCan您能提供更多信息吗?这个JSON从哪里来?一个存储将存储模型实例;这个存储将存储多个“元素”实例吗?看起来像每个“属性”将是一个单独模型的实例。您可以使用关联。我的JSON来自我的服务器的请求,我将其转换为字符串。现在,我尝试将这些单独的属性放入一个存储中,然后将它们放入一个网格。如果您遵循我的链接,它将为您提供更多详细信息遵循此示例:可能很明显,这是一个可能的重复,我链接了这个该死的东西,看在上帝的份上。先生,你是个天才。这非常有效,谢谢。我如何才能从模型中提取elements.element.name并将其放入它自己的列中?这应该像模型[“somecolumnname”]一样简单=elements.element.nameKind。这个脚本真正做的就是创建一个具有键/值对的通用JS对象。因为存储有一个“字段”定义时,它会自动尽最大努力将传入的JS对象强制转换为商店知道如何使用的模型。有一个完整的API用于创建用户定义的模型,并使用适当的getter/setter方法与模型的属性交互。最后,我建议您朝这个方向走,因为“字段”配置本身不利于重用,而正确的模型定义则有利于重用。很乐意帮忙!祝你好运!