0

I am trying to parse a childId value in below Response. I am unable to parse the value. I am a newbie to the association and hasMany concepts. I am giving an alert childId value in app.js but it's not displaying. Can anybody tell me whether my mapping is correct? Can anybody tell me what the problem is and how to fix it?

Sample.Json

{
        "parents":{
         "parent1":{
           "parent":[
             {
                 "children":{
                     "child":[
                      {
                          "childId":1,
                          "childdetails": {
                  "childrendetails": [
                    {
                      "childName": "Test",
                      "childAge": "19"
                    },
                    {
                      "childName": "Test1",
                      "childAge": "20"
                    }
                  ]
                }

                  },
                      {
                          "childId":2,
                           "childdetails": {
                  "childrendetails": [
                    {
                      "childName": "Test2",
                      "childAge": "25"
                    },
                    {
                      "childName": "Test3",
                      "childAge": "24"
                    }
                  ]
                } 


                      }
                   ]
                }
             },
             {
            "children":{
                   "child":[
                      {
                         "childId":3,
                         "childdetails": {
                  "childrendetails": [
                    {
                      "childName": "Test4",
                      "childAge": "25"
                    },
                    {
                      "childName": "test5",
                      "childAge": "21"
                    }
                  ]
                }


                      },
                      {
                         "childId":4,
                          "childdetails": {
                  "childrendetails": [
                    {
                      "childName": "Test6",
                      "childAge": "26"
                    },
                    {
                      "childName": "test7",
                      "childAge": "27"
                    }
                  ]
                }
                     }




                   ]
                },


               "parentName":"firstName",
               "parentAge":"28"

             },


             {
                 "children":{
                     "child":[
                      {
                          "childId":5,
                          "childdetails": {
                  "childrendetails": [
                    {
                      "childName": "Test8",
                      "childAge": "24"
                    },
                    {
                      "childName": "Test9",
                      "childAges": "27"
                    }
                  ]
                }


                      },
                      {
                          "childId":6,
                           "childdetails": {
                  "childrendetails": [
                    {
                      "childName": "Test10",
                      "childAge": "25"
                    },
                    {
                      "childName": "Test11",
                      "childAge": "24"
                    }
                  ]
                } 


                      }
                   ]
                }
             },
             {
                "children":{
                   "child":[
                      {
                         "childId":7,
                         "childdetails": {
                  "childrendetails": [
                    {
                      "childName": "Test12",
                      "childAge": "25"
                    },
                    {
                      "childName": "Test13",
                      "childAge": "21"
                    }
                  ]
                }


                      },
                      {
                         "childId":8,
                          "childdetails": {
                  "childrendetails": [
                    {
                      "childName": "Test14",
                      "childAge": "26"
                    },
                    {
                      "childName": "Test15",
                      "childAge": "27"
                    }
                  ]
                }
                     }


                ]
                },


               "parentName":"secondname",
               "parentAge":"35"

             }

            ]

       }


    }

    }

ParentModel.js

Ext.define("extcityview.model.ParentModel", {
    extend: 'Ext.data.Model',
     fields: [
        'parentName', 'parentAge'
    ],
    hasMany: {model: 'extcityview.model.ChildrenModel', name: 'children'},

});




Ext.define("extcityview.model.ChildrenModel", {
    extend: 'Ext.data.Model',
    hasMany  : {model:'extcityview.model.ChildModel', name:'child', associationKey: 'childItems'},
    belongsTo: 'extcityview.model.ParentModel'
});


Ext.define("extcityview.model.ChildModel", {
    extend: 'Ext.data.Model',
    fields: [
         'childId'
    ],
     belongsTo: 'extcityview.model.ChildrenModel'
});

ChildStore.js

Ext.define('extcityview.store.ChildStore', {
    extend : 'Ext.data.Store',
    storeId : 'samplestore',
    model : 'extcityview.model.ParentModel',
    autoLoad : 'true',
    proxy : {
        type : 'ajax',
        url : 'sample.json',
        reader : {
            type  : 'json',
            root  :'parents.parent1.parent'     
        }
    }

}); 

app.js

var store = Ext.create('extcityview.store.ChildStore', {

                               model: "extcityview.model.ParentModel",

});

store.load({
            callback: function() 
            {
              console.log("i am in callback");
                var parent = store.first();
                alert("parent"+parent);
                console.log("parent"+parent);
                parent.children().each(function(children){
                 children.child().each(function(child)  {
                 alert("sub region anme"+child.get('childId'));
                 console.log("sub region name"+child.get('childId'));

                 });




                }); 
            }
        });

Thanks

1 Answer 1

1

The first thing I notice is your JSON seems to be over nested. I would change that first... the structure you have is going to make life harder than it needs to be.

JSON

{
    "parents": [
        {
            "children": [
                {
                    "childId": 7,
                    "childdetails": [
                        {
                            "childName": "Test12",
                            "childAge": "25"
                        },
                        {
                            "childName": "Test13",
                            "childAge": "21"
                        }
                    ]
                },
                {
                    "childId": 8,
                    "childdetails": [
                        {
                            "childName": "Test14",
                            "childAge": "26"
                        },
                        {
                            "childName": "Test15",
                            "childAge": "27"
                        }
                    ]
                }
            ],
            "parentName": "secondname",
            "parentAge": "35"
        }
    ]
}    

You should be able to get rid of your ChildrenModel and have the ChildModel belong to the ParentModel. Also, you could add a hasMany to the ChildModel for it's "childdetails" referencing a ChildDetails model.

I always find it helpful to refresh my memory with this guys ExtJs hasMany relationship rules.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.