2013-09-21 3 views
5

ich ein treepanel und ich schaffen und schaffen store wieExtjs4.2.1 - Last json zu treepanel nicht

  var store = Ext.create('Ext.data.TreeStore', { 
      autoload: false, 
      proxy: { 
       type: 'ajax', 
       url: 'data.php', 
       reader: { 
        type: 'json', 
        root: 'results'     
       } 
      } 
      }); 

meinem Server Druck json aussehen

{ "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} 
     ] 
    } 
    ] 
} 

Aber wenn ich meinen Code ausführen, i siehe Firebug und das immer laufen GET http://localhost/example/data.php... nie aufhören :(

und mein Baum ist so viel doppelt hinzugefügt

Wie zu beheben, die

bearbeiten
Im wirklichen i definieren mein treepanel mit Alias ​​und dessen Verwendung als xtype
Aber ich schaffen neues Beispiel und bekommen gleiche Problem danken. Hier ist meine 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() 
     }); 

Und hier ist mein 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} 
     ] 
    } 
    ] 
}"; 

Antwort

5

speichern folgen Was Sie hier haben, ist etwas, das ich betrachten ein Fehler in der treestore sein. Wenn Sie den Leser so ändern, dass er ein Stammverzeichnis verwendet, das nicht children ist, müssen Sie auch jede Instanz des untergeordneten Eigenschaftsnamens in den Daten in den neuen Namen ändern. Das heißt, wenn Sie die Wurzel zu results, Ihre Baumdaten ändern wollen würde tatsächlich so etwas wie folgt aussehen:

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} 
     ] 
    } 
    ] 
}"; 

Die andere Option ist die oberste Ebene results Eigenschaftsnamen children zu ändern und die Wurzel markieren Ihr Geschäft als children.

+1

Es hat mich eine Weile gedauert, bis ich das herausgefunden habe, weil das Verhalten keinen Sinn macht benutze eine Tonne Bäume in unserer App. – Reimius

+0

das ist Problem Danke :) – freestyle

1

Ihre autoload Config Rechtschreibung überprüfen.

var store = Ext.create('Ext.data.TreeStore', { 
     // autoload: false, 
      autoLoad : false, 
      proxy: { 
       type: 'ajax', 
       url: 'data.php', 
       reader: { 
        type: 'json', 
        root: 'results'     
       } 
      } 
      }); 
+0

ich es einfach und das gleiche Problem ändern :( – freestyle

+0

können Sie treepanel Konfiguration zur Verfügung stellen? – jeewiya

+0

plz sehen meine bearbeiten – freestyle

0

Können Sie nur Stammdaten hinzufügen wie

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'     
       } 
      } 
      }); 
+0

die :(noch nicht funktioniert hat – freestyle

+0

können Sie beispielsweise auf jsfiddle mit Ihrem Code erstellen. Ich werde es überprüfen. – jeewiya

+0

aber das mit php und jsfiddle denke das kann ich nicht.Ich benutze extjs 4.2.1.883, ich bearbeite meinen titel – freestyle