- Put the proxy in the model, unless you have a very good reason not to [1]
- Always use fully qualified model name
- Always set the getterName
- Always set the setterName
- Always set the associationKey, if the foreign object is returned in the same response as this object
- Always set the foreignKey, if you want to load the foreign object at will
- Consider changing the instanceName to something shorter
- The getter behaves differently depending on whether the foreign object is loaded or not. If it's loaded, the foreign object is returned. Otherwise, you need to pass in a callback to get it.
- You should set the name property if you plan to override this association.
- You do not need a belongsTo relationship for a hasMany to work
- Set the primaryKey property if the id field of the parent model is not "id"
- Sometimes you need to use uses or requires for the belongsTo association. Watch out for circular references though.
- Calling setter() function does not seem to set the instance. Set object.belongsToInstance = obj if calling the setter().
Ext.define('Assoc.model.PhoneNumber', {
extend:'Ext.data.Model',
fields:[
'number',
'contact_id'
],
belongsTo:[
{
name:'contact',
instanceName:'contact',
model:'Assoc.model.Contact',
getterName:'getContact',
setterName:'setContact',
associationKey:'contacts',
foreignKey:'contact_id'
}
],
proxy:{
type:'ajax',
url:'assoc/data/phone-numbers.json',
reader:{
type:'json',
root:'phoneNumbers'
}
}
});
/*
* Assuming Contact model uses an AJAX proxy with url 'contacts', and its id field is "id",
* the below function call will make an http request like this:
* /contacts?id=88
*/
var pn = new Assoc.model.PhoneNumber( { contact_id:88 } );
pn.getContact( function(contact, operation){
console.log('tried to load contact. this.contact is now set to the contact');
} );
/* you can call phoneNumber.setContact(contact). This will set contact_id on the phone number, BUT it won't set the contact instance on phonenumber, which is likely a bug: */
var contact = new Assoc.model.Contact({id:77});
var phoneNumber = new Assoc.model.PhoneNumber();
phoneNumber.setContact(contact);
console.log(phoneNumber.get('contact_id')) //77
console.log(phoneNumber.contact) //undefined
phoneNumber.contact = contact; //you need to do this if you want to use that reference in the future.
Comments
Post a Comment