如何显示嵌套的json数据/ extjs4?
我有一个返回7值的函数,我用一个元组返回它们,因为它们没有相同的类型 然后我serelizes它 所以我可以在我的js脚本中读取我的结果json,我可以通过ItemN如何显示嵌套的json数据/ extjs4?
看看代码:
public JArray getJsonData()
{
//my queries here//
var vl = new List<Tuple<string, string, string, int, int, double, string >>();
vl.Add(new Tuple<string, string, string,int, int, double, string>
(item.Date , item.Adress, name, item.login, pwd, role, id));
}
JArray o = JArray.FromObject(vl);
return o;
}
我extjs4店:
var myStore2 = new Ext.data.JsonStore({
fields: ['Item1', 'Item2', 'Item3', 'Item4', 'Item5', 'Item6', 'Item7'] ,
data: []
});
的问题是,现在我需要回到另一个元素,使它们8 ELE在我的元组 发言:所以我得到这个有趣的错误
the eight element of an eight tuple must be a tuple
,所以我加我8元的元组的要求。
的问题是,现在我得到这个JSON格式:(注意“休息”末)
{Item1:"27-09-2011",Item2:"LA",Item3:"armance",Item4:"astrocybernaute",Item5:"[email protected]",Item6:"Admin",Item7,Rest : {Item1 : 26 }}
问题是,我不知道如何访问它在我的店里extjs4。 Item8当然不起作用,Rest不起作用,item1也不起作用!
任何想法plz?
感谢您对乌尔时间
编辑这是我的马特·格里尔建议
Ext.define('MyModel', {
extends: 'Ext.data.Model',
fields: [
{ name: 'Item1' },
{ name: 'Item2' },
{ name: 'Item3' },
{ name: 'Item4' },
{ name: 'Item5' },
{ name: 'Item6' },
{ name: 'Item7' },
{ name: 'Item8', mapping: 'Rest.Item1' }
]
});
var myStore2 = new Ext.data.JsonStore({
model: 'MyModel',
proxy: {
type: 'ajax',
url: '',
autoLoad :true,
reader: {
type: 'json'
}
}
});
后新店,但它仍然没有工作
SOLUTION 我想指出Store.loadData不尊重字段映射
问题是sencha团队改变了loadData的行为,并且它不是以明确的方式记录的东西。
以下内容添加到您的代码库(上面您的应用程序代码,但低于EXT-all.js):
Ext.override(Ext.data.Store, {
loadDataViaReader : function(data, append) {
var me = this,
result = me.proxy.reader.read(data),
records = result.records;
me.loadRecords(records, { addRecords: append });
me.fireEvent('load', me, result.records, true);
}
});
然后使用:
mystore2.loadDataViaReader(data)
我不知道是哪里元组错误来自于。如图所示here
试试这个
var myTuple = Tuple.Create(3,4,5,8,12,4,12,99);
myTuple应该是8个INTS的八倍octuples被.NET支持。
但是,如果您仍然遇到该错误,并且您必须在Ext中解决此问题,则可以使用映射。您需要定义一个模型,并在模型的字段使用的映射来抓住这最后一个值:
Ext.define('MyModel', {
extends: 'Ext.data.Model',
fields: [
{ name: 'field1' },
// fields 2 through 7
{ name: 'field8', mapping: 'Rest.Item1' }
]
});
var myStore = new Ext.data.JsonStore({
model: 'MyModel',
// ...
});
我从来没有真正尝试过定义权在商店领域,我认为Ext会自动创建模型您。所以你可能也可以在商店中进行映射。
当我们使用loadData方法,以及使用的代理是Memory
代理时,您的解决方案会运行。
其实,看来EXTJS不能映射数据时,它的内存代理。但是当它的一个Ajaxs代理它可以映射数据和字段。
Exemples内存代理
var fields = [
{name: 'id', mapping: 'id'},
{name: 'code', mapping: 'code'},
{name: 'code', mapping: 'exercice'},
{name: 'code', mapping: 'code'},
{name: 'typeDocument', mapping: 'typeDocument'},
{name: 'utilisateur', mapping: 'editionJobs[0].utilisateur'},
{name: 'dateCreation', mapping: 'editionJobs[0].dateCreation'},
{name: 'jobId', mapping: 'editionJobs[0].id'},
{name: 'avenant', mapping: 'editionJobs[0].avenant'},
{name: 'etat', mapping: 'editionJobs[0].etat'}
];
var data = [];
store = new Ext.data.Store({
fields: fields,
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'listDossier'
}
},
listeners: {
load: function(store, records, options) {
store.fireEvent('datachanged', store);
}
}
});
Ext.getCmp('listeEditionDossierGridPanel').getStore().loadDataViaReader(listDossier); // OK, thx for the method ;)
Ext.getCmp('listeEditionDossierGridPanel').getStore().loadData(listDossier); // Not ok
其它为例使用Ajax代理:
var fields = [
{name: 'code', mapping : 'code'},
{name: 'avis', mapping : 'demande.avis'},
{name: 'commentaire', mapping : 'demande.commentaire'},
{name: 'id', mapping: 'demande.id'}
];
store = new Ext.data.Store({
fields: fields,
autoLoad: true,
proxy: {
type: 'ajax',
extraParams: {jsonRequest:JSON.stringify(valeurs)},
url : 'chargerDossiersEligibles.do',
reader: {
type: 'json',
root: 'dossiersEligibles'
}
}
});
在这种情况下,所有的罚款和DATAS可以映射。
干杯
伯努瓦
不直接关系到你的问题,但也许你应该看看Dextop,因为它解决了许多.NET/Ext JS的数据连接问题。 https://github.com/codaxy/dextop – Marko
msdn说:“.NET框架直接支持具有一至七个元素的元组,另外,可以通过将元组对象嵌套在Rest属性中来创建八个或更多元素的元组(T1,T2,T3,T4,T5,T6,T7,TRest)对象的元组。来源:http://msdn.microsoft.com/en-us/library/system.tuple.aspx – mistaecko
是啊我得到这个,问题是我做了这个我不知道如何读嵌套的JSON数据到我的extjs网格 – Armance