我的代码看起来像这样,但商店/树中没有数据。
JSON存储有效吗?我需要在JSON之上root
吗?
必须在“树”面板中定义哪些列?
JSON:
{
"status" : {
"status" : 0,
"msg" : "Ok",
"protocolversion" : "1.1.json"
},
"value" : {
"name" : "Root",
"path" : "\/",
"leaf" : false,
"children" : [
{
"name" : "subfolder1",
"path" : "\/subfolder1",
"leaf" : false,
"children" : []
},
{
"name" : "subfolder2",
"path" : "\/subfolder2",
"leaf" : false,
"children" : []
},
{
"name" : "report1",
"path" : "\/report1",
"leaf" : true,
"children" : []
}
]
}
}
我的ExtJs代码:
型号:
// Model for store
var oModel = Ext.define('TreeModel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'name', type: 'string' },
{ name: 'path', type: 'string' }
]
});
商品
// Store with local proxy
var oStore = Ext.create('Ext.data.TreeStore', {
model: oModel,
autoLoad: true,
proxy: {
type : 'ajax',
url : './data/response.json'
},
reader: {
type : 'json',
root : 'value'
}
});
TreePanel中:
// View with TreePanel
var oTreePanel = Ext.create( 'Ext.tree.Panel', {
store : oStore,
useArrows : true,
displayField: 'text',
rootVisible : true,
multiSelect : true,
border : 0,
columns : [
{
xtype : 'treecolumn',
dataIndex: 'name',
text : 'Tree',
flex : 3
},
{
dataIndex: 'path',
text : 'Path',
flex : 2
}
]
} );
答案 0 :(得分:3)
您需要在json和读者的根目录中将value
更改为children
。
思考方式是:读者的根告诉读者记录数据的开始位置。但是因为树数据是嵌套的(一个节点可以有子节点),ExtJS会在每个节点中查找另一个根(然后在后一个节点中查找另一个根,依此类推)。
因此,如果您打电话给读者的根'孩子',它将在节点内找到节点children
节点。
你可以同样称它为“潜艇”或“其他”;你只需要确保在整个层次结构中使用相同的东西,包括json数据的根。
答案 1 :(得分:2)
这是一个树面板示例,我可以使用'data'作为子节点在MVC结构中实现功能:
<强> JSON:强>
Ext.data.JsonP.callback4({
"message": "", "data": [
{
"descr": "TEST REASON",
"leaf": false,
"data": [
{
"descr": "TEST REASON",
"leaf": true,
"data": null
}
]
},
{
"descr": "Another Type Code",
"leaf": false,
"data": []
},
{
"descr": "Quite A Different One I Think",
"leaf": false,
"data": [
{
"descr": "A Child Of That",
"leaf": true,
"data": null
}
]
}
]
})
<强> MODEL:强>
Ext.define('App.model.treePanel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'descr', type: 'auto' },
{ name: 'leaf', type: 'auto' }
],
proxy: {
type: 'jsonp',
url: 'yourURL',
//extraParams: {
//},
headers: { 'Content-type': 'text/json; charset=utf-8', 'Accepts': 'text/json' },
reader: {
type: 'json',
root: 'data',
successProperty: 'success'
}
}
});
商品强>
Ext.define('App.store.treePanels', {
extend: 'Ext.data.TreeStore',
model: 'App.model.treePanel'
});
查看:强>
Ext.define('App.view.treePanel', {
extend: 'Ext.tree.Panel',
xtype:'treePanel',
title: 'My Items',
store: 'treePanels',
rootVisible: false,
//hideHeaders:true,
columns: [
{
xtype: 'treecolumn',
dataIndex: 'descr',
text: 'Current Types and Reasons',
flex: .5
}
],
tbar:{
items: [
{
xtype: 'button',
text: 'Remove Item'
},
{
xtype: 'button',
text:'Edit Item'
}
]
}
});
请注意:rootVisible:false
是必需的。