2016-06-08 20 views
0

Meine Hoffnung ist es, ein JSON-Objekt als Baum aus meiner Sicht gerendert zu bekommen. Mein Code ist in einer Datei namens /app/view/main/Tree.jsGrabbing Tree von JSON

Ext.define('SGSS.view.main.Tree', {  
    extend: 'Ext.tree.Panel', 
    alias: 'viewmodel.tree', 
    xtype: 'SimpleTree', 
    width: 400, 
    height: 250, 
    store: { 
     root: { 
      expanded: true 
     }, 
     proxy: { 
      type: 'ajax', 
      url: '/cgi-bin/uiconnector', 
      reader: { 
       type: 'json', 
       rootProperty: 'assets' 
      } 
     } 
    } 
}); 

Wenn ich auf die Seite aufrufen, die diese verweist, erhalte ich einen Bildschirm, der ein wenig anders aussieht als beabsichtigt:

enter image description here Es sind nur leere Ordner, die unbegrenzt weiterlaufen. Nicht das JSON-Objekt, das ich im Sinn hatte. Irgendwelche Gedanken darüber, was ich falsch mache?

Meine JSON ist wie folgt:

{ 
    "assets": { 
    "batteryzone": [ 
    { 
     "id": "10001", 
     "type": "batteryzone", 
     "label": "BZ1", 
     "parentid": "1001", 
     "model": "sim", 
     "alarmsev": "None", 
     "extant": "true", 
     "invertersonline": "0", 
     "hvaconline": "0", 
     "racksonline": "0", 
     "interfacerev": "0", 
     "plcrevision": "0", 
     "numbatteryracks": "20", 
     "dcvoltage": "0.0", 
     "dcpower": "0.0", 
     "averagesoc": "0.0", 
     "storedenergy": "0.0", 
     "startupsubstate": "0", 
     "startupsequence": "0", 
     "recoverymode": "false", 
     "tempmaxconnected": "-4.0", 
     "chargecapacity": "0", 
     "dischargecapacity": "0", 
     "dccurrent": "0.0", 
     "containerenabled": "false", 
     "hicell": "3.016", 
     "locell": "3.011", 
     "nameplateenergy": "1950", 
     "recoveryrunning": "false", 
     "currinputs": [] 
    }, 
    { 
     "id": "10002", 
     "type": "batteryzone", 
     "label": "BZ2", 
     "parentid": "1001", 
     "model": "sim", 
     "alarmsev": "None", 
     "extant": "true", 
     "invertersonline": "0", 
     "hvaconline": "0", 
     "racksonline": "0", 
     "interfacerev": "0", 
     "plcrevision": "0", 
     "numbatteryracks": "20", 
     "dcvoltage": "0.0", 
     "dcpower": "0.0", 
     "averagesoc": "0.0", 
     "storedenergy": "0.0", 
     "startupsubstate": "0", 
     "startupsequence": "0", 
     "recoverymode": "false", 
     "tempmaxconnected": "-4.0", 
     "chargecapacity": "0", 
     "dischargecapacity": "0", 
     "dccurrent": "0.0", 
     "containerenabled": "false", 
     "hicell": "3.016", 
     "locell": "3.011", 
     "nameplateenergy": "1950", 
     "recoveryrunning": "false", 
     "currinputs": [] 
     } 
    ] 
    } 
} 

bin ich etwas fehlt? (Ich meine, offensichtlich bin ich!)

+0

Das erste Problem, das ich sehe, ist, dass Ihr Geschäft nicht als ein TreeStore, sondern eher als ein Standard (flacher) Speicher definiert wird. Ich hatte das gleiche unbestimmte Rekursionsproblem mehr als einmal, als ich vergaß, den Laden zu einem Baumladen zu machen. – Alexander

Antwort

1

Das JSON-Format, das Sie verwenden, ist nicht das richtige Baumformat, das das Strukturfeld einen Baum bilden muss. Das Datenformat benötigt wird hier gezeigt:

 { 
      expanded: true, 
      children: [{ 
       text: 'SFO  ✈  DFW', 
       duration: '6h 55m', 
       expanded: true, 
       children: [{ 
        text: 'SFO  ✈  PHX', 
        duration: '2h 04m', 
        leaf: true 
       }, { 
        text: 'PHX layover', 
        duration: '2h 36m', 
        isLayover: true, 
        leaf: true 
       }, { 
        text: 'PHX  ✈  DFW', 
        duration: '2h 15m', 
        leaf: true 
       }] 
      }] 
     } 

Hier ist die rootProperty angegeben werden ist 'Kinder', wie in der docs for the treestore im folgenden Abschnitt:

Lesen Verschachtelte Daten

Damit der Baum verschachtelte Daten lesen kann, muss der Ext.data.reader.Reader mit einer Root-Eigenschaft konfiguriert sein, so dass der Reader verschachtelte Daten für jeden Knoten finden kann (wenn ein Root nicht spezifisch ist ed, wird standardmäßig 'Kinder'). Dadurch wird der Baum aufgefordert, nach verschachtelten Baumknoten mit dem gleichen Schlüsselwort, d. H. "Kinder", zu suchen. Wenn in der Konfiguration ein Stamm angegeben ist, stellen Sie sicher, dass alle verschachtelten Knoten mit Kindern denselben -Namen haben.

Beachten Sie auch, dass Blatt: true verwendet worden ist, dass der Knoten zu repräsentieren das Terminal/Blattknoten des Baumes zu sein, das heißt, dass der Knoten enthält keine untergeordneten Knoten.

Sie können die API für weitere Beispiele auf das Datenformat beziehen.

+0

Wow ... also sagt mir das, dass ExtJS6 ** JSON nicht verwenden kann, wie es ist? Muss ich diese Werte irgendwie zu JSON hinzufügen, um sie nutzbar zu machen? –

+0

Ja, die Daten müssen entsprechend der Baumstruktur formatiert werden. –