title: Re formatting JSON data to fit into tree store
body: <p>I want to make Nested list of shopping categories using data provided by server which looks something like this:</p>
  
  <pre><code>{
      "status":{"statusCode":15001},
      "data":[
          {"itemId":1, "name":"Men", "subCategories":[
              {"itemId":2, "name":"Clothes", "subCategories":[
                  {"itemId":3, "name":"Formals", "leaf":true,"subCategories":[]},
                  {"itemId":4, "name":"Casual", "leaf":true,"subCategories":[]},
                  {"itemId":5, "name":"Sports", "leaf":true,"subCategories":[]}
              ]},
              {"itemId":6, "name":"Accessories", "subCategories":[
                  {"itemId":7, "name":"Formals", "leaf":true,"subCategories":[]},
                  {"itemId":8, "name":"Casual", "leaf":true,"subCategories":[]},
                  {"itemId":9, "name":"Sports", "leaf":true,"subCategories":[]}
              ]}
          ]},
          {"itemId":10, "name":"Women", "subCategories":[
              {"itemId":11, "name":"Clothes", "subCategories":[
                  {"itemId":12, "name":"Formals", "leaf":true,"subCategories":[]},
                  {"itemId":13, "name":"Casual", "leaf":true,"subCategories":[]},
                  {"itemId":14, "name":"Ethnic", "leaf":true,"subCategories":[]}
              ]},
              {"itemId":15, "name":"Shoes", "subCategories":[
                  {"itemId":16, "name":"Hells", "leaf":true,"subCategories":[]},
                  {"itemId":17, "name":"Wedges", "leaf":true,"subCategories":[]},
                  {"itemId":18, "name":"Sports", "leaf":true,"subCategories":[]}
              ]}
          ]}
      ]
  }
  </code></pre>
  
  <p>Since tree structure is wrapped in <code>data</code> element and children are wrapped in <code>subCategories</code> tag which is different from <code>data</code> so I wanted to pre-process this data such that it can be used by <code>Nested List</code> directly by making response like this:</p>
  
  <pre><code>{
      "categories":[
          {"itemId":1, "name":"Men", "categories":[
              {"itemId":2, "name":"Clothes", "categories":[
                  {"itemId":3, "name":"Formals", "leaf":true,"categories":[]},
                  {"itemId":4, "name":"Casual", "leaf":true,"categories":[]},
                  {"itemId":5, "name":"Sports", "leaf":true,"categories":[]}
              ]},
              {"itemId":6, "name":"Accessories", "categories":[
                  {"itemId":7, "name":"Formals", "leaf":true,"categories":[]},
                  {"itemId":8, "name":"Casual", "leaf":true,"categories":[]},
                  {"itemId":9, "name":"Sports", "leaf":true,"categories":[]}
              ]}
          ]},
          {"itemId":10, "name":"Women", "categories":[
              {"itemId":11, "name":"Clothes", "categories":[
                  {"itemId":12, "name":"Formals", "leaf":true,"categories":[]},
                  {"itemId":13, "name":"Casual", "leaf":true,"categories":[]},
                  {"itemId":14, "name":"Ethnic", "leaf":true,"categories":[]}
              ]},
              {"itemId":15, "name":"Shoes", "categories":[
                  {"itemId":16, "name":"Hells", "leaf":true,"categories":[]},
                  {"itemId":17, "name":"Wedges", "leaf":true,"categories":[]},
                  {"itemId":18, "name":"Sports", "leaf":true,"categories":[]}
              ]}
          ]}
      ]
  }
  </code></pre>
  
  <p>For this I was overriding <code>getResponseData</code> of reader but this method never gets called and no records are loaded in store. What am I doing wrong? </p>
  
  <p>Here is my store:</p>
  
  <pre><code>Ext.define('MyTabApp.store.CategoriesStore',{
      extend:'Ext.data.TreeStore',
      config:{
          model   : 'MyTabApp.model.Category',
          autoLoad: false,
          storeId : 'categoriesStore',
          proxy: {
              type: 'ajax',
              url: Properties.CONFIG_SERVICE_BASE_URL+'topnav/getall',
              reader: {
                  type: 'json',
                  getResponseData: function(response) {
                      console.log("in getResponseData"); // Never logged in console
                      var rText = response.responseText;
                      var processed = Helper.replaceAll("data","categories",rText);
                      processed = Helper.replaceAll("subCategories","categories",processed);
                      var respObj = Ext.JSON.decode(processed);
                      return respObj.categories;
                  }
              }
          },
          listeners:{
              load: function( me, records, successful, operation, eOpts ){ 
                  console.log("categories tree loaded");
                  console.log(records); // This prints blank array
              }
          }
      }
  });
  </code></pre>
  
  <p>and here is model:</p>
  
  <pre><code>Ext.define('MyTabApp.model.Category', {
      extend : 'Ext.data.Model',
      config : {
          idProperty  : 'itemId',
          fields      : [ 
             {name : 'itemId',type : 'int'}, 
             {name : 'name',type : 'string'}
          ]
      }
  });
  </code></pre>
  
  <p>This is the list:</p>
  
  <pre><code>Ext.define('MyTabApp.view.CategoriesList', {
      extend: 'Ext.dataview.NestedList',
      alias : 'widget.categorieslist',
      config: {
          height              : '100%',
          title               : 'Categories',
          displayField        : 'name',
          useTitleAsBackText  : true,
          style               : 'background-color:#999 !important; font-size:75%',
          styleHtmlContent    : true,
          listConfig: {
              itemHeight: 47,
              itemTpl : '&lt;div class="nestedlist-item"&gt;&lt;div style="position:absolute; left:10px; top:10px; color:#222; font-size:130%"&gt;{name}&lt;/div&gt;&lt;/div&gt;',
              height : "100%"
          }
      },
      initialize : function() {
          this.callParent();
          var me = this;
  
          var catStore = Ext.create('MyTabApp.store.CategoriesStore');
          catStore.load();
          me.setStore(catStore);
      }
  });
  </code></pre>
  
  <p>What is best practice to process &amp; format received data if it is not in the format we want and we don't have control over services?</p>