Nested XML data and ExtJS model associations

hongemymn

New Member
I'm trying to map XML data to a series of models in ExtJS. I'm able to extract the data from the toplevel model, however, the associations with it fail to retrieve the necessary data.Here are all of my models:\[code\]Ext.define('app.model.ProductType', {extend: 'Ext.data.Model',idProperty: 'id',fields: [{ name: 'id', mapping: 'id', type: 'int'},{ name: 'name', mapping: 'name', type: 'string'},{ name: 'sometag', mapping: 'sometag', type: 'string'}],associations: [{ type: 'hasMany', model: 'app.model.Address', name: 'addresses', autoLoad: true, reader: { type: 'xml', record: 'address', root: 'addressList' }},{ type: 'hasMany', model: 'app.model.PhoneContact', name: 'contacts', autoLoad: true, reader: { type: 'xml', record: 'phoneContact', root: 'phoneContactList' }},{ type: 'hasOne', model: 'app.model.OneToOne', name: 'oneToOne', autoLoad: true, reader: { type: 'xml', record: 'oneToOne' }}],proxy: { type: 'ajax', url: 'data/example.xml', reader: { type: 'xml', record: 'ProductType', root: 'ProductResultSet' }}});\[/code\]Address:\[code\]Ext.define('app.model.Address', {extend: 'Ext.data.Model',fields: [{ name: 'city', mapping: 'city', type: 'string'},{ name: 'street', mapping: 'street', type: 'string'}],associations: [{ type: 'belongsTo', model: 'app.model.ProductType'}]});\[/code\]PhoneContact:\[code\]Ext.define('app.model.PhoneContact', {extend: 'Ext.data.Model',fields: [{ name: 'primary', mapping: 'primary', type: 'string'},{ name: 'cell', mapping: 'cell', type: 'string'}],associations: [{ type: 'belongsTo', model: 'app.model.ProductType'}]});\[/code\]OneToOne:\[code\]Ext.define('app.model.OneToOne', {extend: 'Ext.data.Model',fields: [{ name: 'first', mapping: 'firstfield', type: 'string'},{ name: 'second', mapping: 'secondfield', type: 'string'}],associations: [{ type: 'belongsTo', model: 'app.model.ProductType'}]});\[/code\]Here's my app.js\[code\]Ext.Loader.setConfig({enabled: true});Ext.application({name: 'app',autoCreateViewport: false,requires: ['app.model.ProductType', 'app.model.Address', 'app.model.PhoneContact', 'app.model.OneToOne', 'app.store.ProductTypeStore'],launch: function() { app.model.ProductType.load(55, { scope: this, callback: function(record, operation) { console.log('Record Addresses:'); console.log(record.addresses()); } }); var s = app.store.ProductTypeStore.create(); s.on('load', this.wiggidy, this); s.load();},wiggidy: function(store, records, success, eOpts) { var rec = store.getAt(0); console.log('Associated Data:'); console.log(rec.getAssociatedData());}});\[/code\]And finally, example.xml\[code\]<ProductResultSet><ProductType> <id>55</id> <name>Product Name</name> <sometag>asdf</sometag> <addressList> <address> <street>12345 a</street> <city>myCity</city> </address> <address> <street>234567 b</street> <city>Denver</city> </address> </addressList> <phoneContactList> <phoneContact> <primary>234</primary> <cell>4667</cell> </phoneContact> <phoneContact> <primary>5467</primary> <cell>87904</cell> </phoneContact> </phoneContactList> <oneToOne> <firstField>value</firstField> <secondField>value</secondField> </oneToOne></ProductType></ProductResultSet>\[/code\]The console spits out "Uncaught TypeError: Cannot call method 'indexOf' of undefined" for the RecordAddresses output, and then I get an object filled with arrays with 0 objects for the Associated Data output.I'm completely stumped on this one. I've searched around everywhere and it's taken me this far. Why is the record not loading the nested data in that xml file?Any help will be greatly appreciated.Thanks, -Matt
 
Back
Top