lia*_*iaK 1 json extjs extjs4.1
我有一个像下面这样的JSON数据.
{
"divisions": [{
"name": "division1",
"id": "div1",
"subdivisions": [{
"name": "Sub1Div1",
"id": "div1sub1",
"schemes": [{
"name": "Scheme1",
"id": "scheme1"
}, {
"name": "Scheme2",
"id": "scheme2"
}]
}, {
"name": "Sub2Div1",
"id": "div1sub2",
"schemes": [{
"name": "Scheme3",
"id": "scheme3"
}]
}
]
}]
}
Run Code Online (Sandbox Code Playgroud)
我想读入TreeStore这一点,但不能改变的子域(divisions,subdivisions,schemes)是相同的(例如,children).
怎么能实现我这个?
当嵌套的JSON加载到TreeStore中时,实际上子节点是通过TreeStore.fillNode()方法和方法之间的递归调用加载的NodeInterface.appendChild().
每个节点的子字段的实际检索TreeStore.onNodeAdded()在此行内完成:
dataRoot = reader.getRoot(data);
Run Code Online (Sandbox Code Playgroud)
该getRoot()阅读器的动态在读者的创建buildExtractors()方法,这是你需要以应对不同的孩子会忘嵌套JSON中的字段.以下是它的完成方式:
Ext.define('MyVariJsonReader', {
extend: 'Ext.data.reader.Json',
alias : 'reader.varijson',
buildExtractors : function()
{
var me = this;
me.callParent(arguments);
me.getRoot = function ( aObj ) {
// Special cases
switch( aObj.name )
{
case 'Bill': return aObj[ 'children' ];
case 'Norman': return aObj[ 'sons' ];
}
// Default root is `people`
return aObj[ 'people' ];
};
}
});
Run Code Online (Sandbox Code Playgroud)
这将能够解释这样的JSON:
{
"people":[
{
"name":"Bill",
"expanded":true,
"children":[
{
"name":"Kate",
"leaf":true
},
{
"name":"John",
"leaf":true
}
]
},
{
"name":"Norman",
"expanded":true,
"sons":[
{
"name":"Mike",
"leaf":true
},
{
"name":"Harry",
"leaf":true
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
请参阅此JsFiddle以获取完整的代码.
| 归档时间: |
|
| 查看次数: |
2594 次 |
| 最近记录: |