Question

With below configuration i am not able to populated json data in tree panel.

After loading store from server i am not able to see any records in console logs.

Is there any specific json structure need to be send from server?

Is there any configuration miss?

Below is the config i am using

MODEL

Ext.define('nsoapp.model.nso.Client', {
    extend: 'Ext.data.Model',

    requires: [
        'Ext.data.Field'
    ],

    fields: [
        {
            name: 'jsxid'
        },
        {
            name: 'name'
        },
        {
            name: 'type'
        },
        {
            name: 'countryId'
        },
        {
            name: 'contact'
        },
        {
            name: 'email'
        }
    ]
});

STORE

Ext.define('nsoapp.store.nso.Client', {
    extend: 'Ext.data.TreeStore',

    requires: [
        'nsoapp.model.nso.Client',
        'Ext.data.proxy.Ajax',
        'Ext.data.reader.Json'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            model: 'nsoapp.model.nso.Client',
            storeId: 'nso.Client',
            defaultRootProperty: 'record',
            proxy: {
                type: 'ajax',
                url: '/client/',
                reader: {
                    type: 'json',
                    root: 'populateClientRes'
                }
            }
        }, cfg)]);
    }
});

TREE PANEL

xtype: 'treepanel',
    flex: 1,
    margins: '0 0 3 0',
    itemId: 'treeClient',
    overlapHeader: false,
    title: 'Clients',
    titleCollapse: false,
    animate: true,
    displayField: 'name',
    rootVisible: false,
    viewConfig: {
        rootVisible: false
    }

In controller i am binding tree store to tree panel

var storeClient=this.getStore('nso.ordermanagement.clientcustomization.Client');
storeClient.load({
callback: function(records, operation, success) {
var treeClient=Ext.ComponentQuery.query("#treeClient")[0];
treeClient.bindStore(storeClient);
}
});

JSON DATA

{
  "populateClientRes":{
    "record":[
      {
        "name":"A_KPI",
        "type":"CLIENT",
        "jsxid":"14487361",
        "countryId":"484",
        "contact":"34434334",
        "email":"",
        "record":[
          {
            "name":"Products",
            "value":"1",
            "type":"PRODUCT"
          },
          {
            "name":"Stores",
            "value":"1",
            "type":"STORE"
          }
        ]
      },
      {
        "name":"aCCStudyTest",
        "type":"CLIENT",
        "jsxid":"14425073",
        "countryId":"484",
        "contact":"1234567890",
        "email":"",
        "record":[
          {
            "name":"Products",
            "value":"1",
            "type":"PRODUCT"
          },
          {
            "name":"Stores",
            "value":"1",
            "type":"STORE"
          }
        ]
      }
    ]
  }
}
Was it helpful?

Solution

Short answer: JSON response is wrong!

Long answer

You specify as root populateClientRes so all children (and children of children) must use this tag.

Standard JSON response:

{
    "success": true,
    "children": [
        { 
            "id": 1, 
            "name": "Phil", 
            "leaf": true 
        },
        { 
            "id": 2, 
            "name": "Nico", 
            "expanded": true, 
            "children": [
                { 
                    "id": 3, 
                    "name": "Mitchell", 
                    "leaf": true 
                }
            ]},
        { 
            "id": 4, 
            "name": "Sue", 
            "loaded": true 
        }
    ]
}

In your case you have to replace record with populateClientRes:

{
    "success": true,
    "populateClientRes": [ 
        {
            "name":"A_KPI",
            "type":"CLIENT",
            "jsxid":"14487361",
            "countryId":"484",
            "contact":"34434334",
            "email":"",
            "populateClientRes": [
                {
                    ...         
                }, {
                    ...
                    populateClientRes: [{...},{...}]
                },
            ]
        },
        {
            ...
        }
    ]
}

Important notes

For all non-leaf nodes that do not have children (for example, Person with name Sue above), the server response MUST set the loaded property to true. Otherwise the proxy will attempt to load children for these nodes when they are expanded.

You find more information's here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top