Clear Up
SharpKit Reference

Association Class

Namespace: Ext.data.association

Base Types

System.Object

Constructors

Name Description
Association()
Association(AssociationConfig)
Association(object) Creates the Association object. @param {Object} config (optional) Config object.

Properties

Name Description
alternateClassName @author Ed Spencer @class Ext.data.association.Association @extends Object *

Associations enable you to express relationships between different {@link Ext.data.Model Models}. Let's say we're writing an ecommerce system where Users can make Orders - there's a relationship between these Models that we can express like this:

*
  
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['id', 'name', 'email'],
hasMany: {model: 'Order', name: 'orders'}
});
Ext.define('Order', {
extend: 'Ext.data.Model',
fields: ['id', 'user_id', 'status', 'price'],
belongsTo: 'User'
});
            
*

We've set up two models - User and Order - and told them about each other. You can set up as many associations on each Model as you need using the two default types - {@link Ext.data.association.HasMany hasMany} and {@link Ext.data.association.BelongsTo belongsTo}. There's much more detail on the usage of each of those inside their documentation pages. If you're not familiar with Models already, {@link Ext.data.Model there is plenty on those too}.

*

Further Reading

*
  • {@link Ext.data.association.HasMany hasMany associations}
  • {@link Ext.data.association.BelongsTo belongsTo associations}
  • {@link Ext.data.association.HasOne hasOne associations}
  • {@link Ext.data.Model using Models}
Self association models

We can also have models that create parent/child associations between the same type. Below is an example, where groups can be nested inside other groups:

  
// Server Data
{
"groups": {
"id": 10,
"parent_id": 100,
"name": "Main Group",
"parent_group": {
"id": 100,
"parent_id": null,
"name": "Parent Group"
},
"child_groups": [{
"id": 2,
"parent_id": 10,
"name": "Child Group 1"
},{
"id": 3,
"parent_id": 10,
"name": "Child Group 2"
},{
"id": 4,
"parent_id": 10,
"name": "Child Group 3"
}]
}
}
// Client code
Ext.define('Group', {
extend: 'Ext.data.Model',
fields: ['id', 'parent_id', 'name'],
proxy: {
type: 'ajax',
url: 'data.json',
reader: {
type: 'json',
root: 'groups'
}
},
associations: [{
type: 'hasMany',
model: 'Group',
primaryKey: 'id',
foreignKey: 'parent_id',
autoLoad: true,
associationKey: 'child_groups' // read child data from child_groups
}, {
type: 'belongsTo',
model: 'Group',
primaryKey: 'id',
foreignKey: 'parent_id',
associationKey: 'parent_group' // read parent data from parent_group
}]
});
Ext.onReady(function(){
Group.load(10, {
success: function(group){
console.log(group.getGroup().get('name'));
group.groups().each(function(rec){
console.log(rec.get('name'));
});
}
});
});
            
*
defaultReaderType @cfg {String} associationKey The name of the property in the data to read the association from. Defaults to the name of the associated model.
primaryKey @cfg {String} primaryKey The name of the primary key on the associated model. Defaults to 'id'. In general this will be the {@link Ext.data.Model#idProperty} of the Model.
Reader Get a specialized reader for reading associated data @return {Ext.data.reader.Reader} The reader, null if not supplied

Methods

Name Description
getReader() Get a specialized reader for reading associated data @return {Ext.data.reader.Reader} The reader, null if not supplied
© Copyright 2005-2011 SharpKit. All rights reserved.