Ember - how to use pushObject on nested data object?
ember.js
Solution
The short:
here is an example how you might do it: http://jsbin.com/esixeh/7/edit
The long:
In the example you will find code lines like the below, which look scary but it works:
App.get('jobs').objectAt(0).jobProducts.objectAt(0).allocations.objectAt(0).deliverys.pushObject({...});
Since down you JSON structure, starting from `App.get('jobs')` the objects are just plain javascript objects and do not extend from `Ember.Object` you cannot use ember methods like `.get('allocations')` or `.get('deliverys')` on them and chain them together like:
App.get('jobs').get('jobProducts').get('allocations').get('deliverys');
or
App.get('jobs.jobProducts.allocations.deliverys');
but you can still use plain javascript dot notation accessor like `.allocations`.
On array's you can still use ember's `.pushObject()`, `.objectAt()` etc. instead of plain `.push()`, because array's are augmented by the framework by default see here for more info on that.
Hope it helps.
Problem
I can already push a new object into the jobs and jobProducts array thanks to this post How to create nested models in Ember.js? but I cannot seem to push new allocations or deliverys. I have included the JSON object below. Any advice is appreciated, I will put together a fiddle of where I currently am when I get a moment. Cheers ``` App.jobs = [ { id: 0, jobTitle: "This is the only job", jobProducts: [ { id: 0, productTitle: "Product 1", allocations:[ { id: 0, allocationTitle: "Allocation 1", deliverys:[ { id: 0, deliveryTitle: "Delivery 1" }, { id: 1, deliveryTitle: "Delivery 2" } ] }, { id: 1, allocationTitle: "Allocation 2", deliverys:[ { id: 0, deliveryTitle: "Delivery 3" }, { id: 1, deliveryTitle: "Delivery 4" } ] } ] }, { id: 1, productTitle: "Product 2", allocations:[ { id: 0, allocationTitle: "Allocation 3", deliverys:[ { id: 0, deliveryTitle: "Delivery 5" }, { id: 1, deliveryTitle: "Delivery 6" } ] }, { id: 1, allocationTitle: "Allocation 4", deliverys:[ { id: 0, deliveryTitle: "Delivery 7" }, { id: 1, deliveryTitle: "Delivery 8" } ] } ] } ] } ]; ```