Extjs4.2.1-Carga json en treepanel falla
extjs4.1 (3)
Creo un treepanel y yo y creo una store
como
var store = Ext.create(''Ext.data.TreeStore'', {
autoload: false,
proxy: {
type: ''ajax'',
url: ''data.php'',
reader: {
type: ''json'',
root: ''results''
}
}
});
mi servidor de impresión json parece
{ "results":
[
{ id : ''1'' , text : ''1'', expanded: true,
children :[
{ id : ''5'' , text : ''5'', leaf:true},
{ id : ''6'' , text : ''6'', leaf:true}
]
},
{ id : ''2'' , text : ''2'', leaf:true},
{ id : ''3'' , text : ''3'', leaf:true},
{ id : ''4'' , text : ''4'', leaf:true},
{ id : ''7'' , text : ''7'', leaf:true},
{ id : ''8'' , text : ''8'', leaf:true},
{ id : ''9'' , text : ''9'', leaf:true},
{ id : ''10'' , text : ''10'', expanded: true,
children :[
{ id : ''11'' , text : ''11'', leaf:true},
{ id : ''12'' , text : ''12'', leaf:true}
]
}
]
}
Pero cuando ejecuto mi código, veo firebug y siempre ejecuto GET http://localhost/example/data.php...
nunca detenga :(
y mi árbol se agrega tanto doble
Cómo arreglar ese agradecimiento
Editar
En real, defino mi treepanel con alias y lo uso como xtype
Pero creo un nuevo ejemplo y tengo el mismo problema. Aquí está mi js
var store = Ext.create(''Ext.data.TreeStore'', {
autoload: false,
proxy: {
type: ''ajax'',
url: ''data.php'',
reader: {
type: ''json'',
root: ''results''
}
}
});
Ext.create(''Ext.tree.Panel'', {
title: ''Simple Tree'',
width: 200,
height: 150,
store: store,
rootVisible: false,
renderTo: Ext.getBody()
});
Y aquí está mi data.php
echo "
{
''success'': true,
''variable'': 100,
''results'':
[
{ id : ''1'' , text : ''1'', expanded: true,
children :[
{ id : ''5'' , text : ''5'', leaf:true},
{ id : ''6'' , text : ''6'', leaf:true}
]
},
{ id : ''2'' , text : ''2'', leaf:true},
{ id : ''3'' , text : ''3'', leaf:true},
{ id : ''4'' , text : ''4'', leaf:true},
{ id : ''7'' , text : ''7'', leaf:true},
{ id : ''8'' , text : ''8'', leaf:true},
{ id : ''9'' , text : ''9'', leaf:true},
{ id : ''10'' , text : ''10'', expanded: true,
children :[
{ id : ''11'' , text : ''11'', leaf:true},
{ id : ''12'' , text : ''12'', leaf:true}
]
}
]
}";
¿Puedes simplemente agregar datos de raíz para almacenar como seguir
var store = Ext.create(''Ext.data.TreeStore'', {
autoLoad : false,
root: {
text: ''Corporate Media'',
id: ''0'',
expanded: true
}
proxy: {
type: ''ajax'',
url: ''data.php'',
reader: {
type: ''json'',
root: ''results''
}
}
});
revisa tu ortografía de configuración de autoLoad.
var store = Ext.create(''Ext.data.TreeStore'', {
// autoload: false,
autoLoad : false,
proxy: {
type: ''ajax'',
url: ''data.php'',
reader: {
type: ''json'',
root: ''results''
}
}
});
Lo que tienes aquí es algo que considero un error en la arboleda. Cuando cambie el lector para usar una raíz que no sea children
, también deberá cambiar cada instancia del nombre de la propiedad secundaria en los datos al nuevo nombre también. Eso significa que si quieres cambiar la raíz a los results
, los datos de tu árbol en realidad deberían verse más o menos así:
echo "
{
''success'': true,
''variable'': 100,
''results'':
[
{ ''id'' : ''1'' , ''text'' : ''1'', ''expanded'': true,
''results'':[
{ ''id'' : ''5'' , ''text'' : ''5'', ''leaf'':true},
{ ''id'' : ''6'' , ''text'' : ''6'', ''leaf'':true}
]
},
{ ''id'' : ''2'' , ''text'' : ''2'', ''leaf'':true},
{ ''id'' : ''3'' , ''text'' : ''3'', ''leaf'':true},
{ ''id'' : ''4'' , ''text'' : ''4'', ''leaf'':true},
{ ''id'' : ''7'' , ''text'' : ''7'', ''leaf'':true},
{ ''id'' : ''8'' , ''text'' : ''8'', ''leaf'':true},
{ ''id'' : ''9'' , ''text'' : ''9'', ''leaf'':true},
{ ''id'' : ''10'' , ''text'' : ''10'', ''expanded'': true,
''results'':[
{ ''id'' : ''11'' , ''text'' : ''11'', ''leaf'':true},
{ ''id'' : ''12'' , ''text'' : ''12'', ''leaf'':true}
]
}
]
}";
La otra opción es cambiar el nombre de la propiedad de los results
nivel superior a los children
y marcar la raíz de su tienda como children
.