X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/6a7e4474cba9d8be4b2ec445e10f1691f7277c50..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/docs/api/Ext.data.Association.html diff --git a/docs/api/Ext.data.Association.html b/docs/api/Ext.data.Association.html new file mode 100644 index 00000000..945c4ec6 --- /dev/null +++ b/docs/api/Ext.data.Association.html @@ -0,0 +1,186 @@ +
Associations enable you to express relationships between different 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 - hasMany and +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, there is plenty on those too.
+ + + + +Further Reading
+ + + + + + + +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',
+ autoLoad: true,
+ 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'));
+ });
+ }
+ });
+
+});
+
+
+The string name of the model that is being associated with. Required
+The string name of the model that is being associated with. Required
+The name of the property in the data to read the association from. +Defaults to the name of the associated model.
+The name of the property in the data to read the association from. +Defaults to the name of the associated model.
+The string name of the model that owns the association. Required
+The string name of the model that owns the association. Required
+The name of the primary key on the associated model. Defaults to 'id'. +In general this will be the Ext.data.Model.idProperty of the Model.
+The name of the model is on the other end of the association (e.g. if a User model hasMany Orders, this is 'Order')
+The name of the model is on the other end of the association (e.g. if a User model hasMany Orders, this is 'Order')
+