Ext.data.JsonP.Ext_data_association_BelongsTo({"mixins":[],"code_type":"ext_define","inheritable":false,"component":false,"meta":{"author":["Ed Spencer"]},"mixedInto":[],"uses":[],"aliases":{"association":["belongsto"]},"parentMixins":[],"superclasses":["Ext.Base","Ext.data.association.Association"],"members":{"event":[],"property":[{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"$className","id":"property-S-className"},{"meta":{},"owner":"Ext.data.association.Association","tagname":"property","name":"associatedName","id":"property-associatedName"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"configMap","id":"property-configMap"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"initConfigList","id":"property-initConfigList"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"initConfigMap","id":"property-initConfigMap"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"isInstance","id":"property-isInstance"},{"meta":{},"owner":"Ext.data.association.Association","tagname":"property","name":"ownerName","id":"property-ownerName"},{"meta":{"protected":true},"owner":"Ext.Base","tagname":"property","name":"self","id":"property-self"}],"css_var":[],"method":[{"meta":{},"owner":"Ext.data.association.Association","tagname":"method","name":"constructor","id":"method-constructor"},{"meta":{"deprecated":{"text":"as of 4.1. Use {@link #callParent} instead."},"protected":true},"owner":"Ext.Base","tagname":"method","name":"callOverridden","id":"method-callOverridden"},{"meta":{"protected":true},"owner":"Ext.Base","tagname":"method","name":"callParent","id":"method-callParent"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"configClass","id":"method-configClass"},{"meta":{"private":true},"owner":"Ext.data.association.BelongsTo","tagname":"method","name":"createGetter","id":"method-createGetter"},{"meta":{"private":true},"owner":"Ext.data.association.BelongsTo","tagname":"method","name":"createSetter","id":"method-createSetter"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"destroy","id":"method-destroy"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"getConfig","id":"method-getConfig"},{"meta":{},"owner":"Ext.Base","tagname":"method","name":"getInitialConfig","id":"method-getInitialConfig"},{"meta":{},"owner":"Ext.data.association.Association","tagname":"method","name":"getReader","id":"method-getReader"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"hasConfig","id":"method-hasConfig"},{"meta":{"protected":true},"owner":"Ext.Base","tagname":"method","name":"initConfig","id":"method-initConfig"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"onConfigUpdate","id":"method-onConfigUpdate"},{"meta":{"private":true},"owner":"Ext.data.association.BelongsTo","tagname":"method","name":"read","id":"method-read"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"setConfig","id":"method-setConfig"},{"meta":{"protected":true},"owner":"Ext.Base","tagname":"method","name":"statics","id":"method-statics"}],"css_mixin":[],"cfg":[{"meta":{},"owner":"Ext.data.association.Association","tagname":"cfg","name":"associatedModel","id":"cfg-associatedModel"},{"meta":{},"owner":"Ext.data.association.Association","tagname":"cfg","name":"associationKey","id":"cfg-associationKey"},{"meta":{},"owner":"Ext.data.association.BelongsTo","tagname":"cfg","name":"foreignKey","id":"cfg-foreignKey"},{"meta":{},"owner":"Ext.data.association.BelongsTo","tagname":"cfg","name":"getterName","id":"cfg-getterName"},{"meta":{},"owner":"Ext.data.association.Association","tagname":"cfg","name":"model","id":"cfg-model"},{"meta":{},"owner":"Ext.data.association.Association","tagname":"cfg","name":"ownerModel","id":"cfg-ownerModel"},{"meta":{},"owner":"Ext.data.association.Association","tagname":"cfg","name":"primaryKey","id":"cfg-primaryKey"},{"meta":{},"owner":"Ext.data.association.Association","tagname":"cfg","name":"reader","id":"cfg-reader"},{"meta":{},"owner":"Ext.data.association.BelongsTo","tagname":"cfg","name":"setterName","id":"cfg-setterName"},{"meta":{},"owner":"Ext.data.association.BelongsTo","tagname":"cfg","name":"type","id":"cfg-type"}]},"tagname":"class","extends":"Ext.data.association.Association","html":"
Alternate names
Ext.data.BelongsToAssociationHierarchy
Ext.BaseExt.data.association.AssociationExt.data.association.BelongsToFiles
Represents a many to one association with another model. The owner model is expected to have\na foreign key which references the primary key of the associated model:
\n\nExt.define('Category', {\n extend: 'Ext.data.Model',\n fields: [\n { name: 'id', type: 'int' },\n { name: 'name', type: 'string' }\n ]\n});\n\nExt.define('Product', {\n extend: 'Ext.data.Model',\n fields: [\n { name: 'id', type: 'int' },\n { name: 'category_id', type: 'int' },\n { name: 'name', type: 'string' }\n ],\n // we can use the belongsTo shortcut on the model to create a belongsTo association\n associations: [\n { type: 'belongsTo', model: 'Category' }\n ]\n});\n
\n\nIn the example above we have created models for Products and Categories, and linked them together\nby saying that each Product belongs to a Category. This automatically links each Product to a Category\nbased on the Product's category_id, and provides new functions on the Product model:
\n\nThe first function that is added to the owner model is a getter function:
\n\nvar product = new Product({\n id: 100,\n category_id: 20,\n name: 'Sneakers'\n});\n\nproduct.getCategory(function(category, operation) {\n // do something with the category object\n alert(category.get('id')); // alerts 20\n}, this);\n
\n\nThe getCategory function was created on the Product model when we defined the association. This uses the\nCategory's configured proxy to load the Category asynchronously, calling the provided\ncallback when it has loaded.
\n\nThe new getCategory function will also accept an object containing success, failure and callback properties\n- callback will always be called, success will only be called if the associated model was loaded successfully\nand failure will only be called if the associatied model could not be loaded:
\n\nproduct.getCategory({\n reload: true, // force a reload if the owner model is already cached\n callback: function(category, operation) {}, // a function that will always be called\n success : function(category, operation) {}, // a function that will only be called if the load succeeded\n failure : function(category, operation) {}, // a function that will only be called if the load did not succeed\n scope : this // optionally pass in a scope object to execute the callbacks in\n});\n
\n\nIn each case above the callbacks are called with two arguments - the associated model instance and the\noperation object that was executed to load that instance. The Operation object is\nuseful when the instance could not be loaded.
\n\nOnce the getter has been called on the model, it will be cached if the getter is called a second time. To\nforce the model to reload, specify reload: true in the options object.
\n\nThe second generated function sets the associated model instance - if only a single argument is passed to\nthe setter then the following two calls are identical:
\n\n// this call...\nproduct.setCategory(10);\n\n// is equivalent to this call:\nproduct.set('category_id', 10);\n
\n\nAn instance of the owner model can also be passed as a parameter.
\n\nIf we pass in a second argument, the model will be automatically saved and the second argument passed to\nthe owner model's save method:
\n\nproduct.setCategory(10, function(product, operation) {\n // the product has been saved\n alert(product.get('category_id')); //now alerts 10\n});\n\n//alternative syntax:\nproduct.setCategory(10, {\n callback: function(product, operation), // a function that will always be called\n success : function(product, operation), // a function that will only be called if the load succeeded\n failure : function(product, operation), // a function that will only be called if the load did not succeed\n scope : this //optionally pass in a scope object to execute the callbacks in\n})\n
\n\nAssociations reflect on the models they are linking to automatically set up properties such as the\nprimaryKey and foreignKey. These can alternatively be specified:
\n\nExt.define('Product', {\n fields: [...],\n\n associations: [\n { type: 'belongsTo', model: 'Category', primaryKey: 'unique_id', foreignKey: 'cat_id' }\n ]\n});\n
\n\nHere we replaced the default primary key (defaults to 'id') and foreign key (calculated as 'category_id')\nwith our own settings. Usually this will not be needed.
\nThe string name of the model that is being associated with.
\n\nNB! This config is required when instantiating the Association directly.\nWhen defining the association as a config object inside Model, the model\nconfiguration will shadow this config.
\nThe name of the property in the data to read the association from. Defaults to the name of the associated model.
\nThe name of the foreign key on the owner model that links it to the associated\nmodel. Defaults to the lowercased name of the associated model plus \"_id\", e.g. an association with a\nmodel called Product would set up a product_id foreign key.
\n\nExt.define('Order', {\n extend: 'Ext.data.Model',\n fields: ['id', 'date'],\n hasMany: 'Product'\n});\n\nExt.define('Product', {\n extend: 'Ext.data.Model',\n fields: ['id', 'name', 'order_id'], // refers to the id of the order that this product belongs to\n belongsTo: 'Order'\n});\nvar product = new Product({\n id: 1,\n name: 'Product 1',\n order_id: 22\n}, 1);\nproduct.getOrder(); // Will make a call to the server asking for order_id 22\n
\nThe name of the getter function that will be added to the local model's prototype.\nDefaults to 'get' + the name of the foreign model, e.g. getCategory
\nThe string name of the model that is being associated with.
\n\nThis config option is to be used when defining the association as a config\nobject within Model. The value is then mapped to associatedModel when\nAssociation is instantiated inside Model.
\nThe string name of the model that owns the association.
\n\nNB! This config is required when instantiating the Association directly.\nHowever, it cannot be used at all when defining the association as a config\nobject inside Model, because the name of the model itself will be supplied\nautomatically as the value of this config.
\nThe name of the primary key on the associated model. In general this will be the\nExt.data.Model.idProperty of the Model.
\nDefaults to: "id"
The name of the setter function that will be added to the local model's prototype.\nDefaults to 'set' + the name of the foreign model, e.g. setCategory
\nThe type configuration can be used when creating associations using a configuration object.\nUse 'belongsTo' to create a BelongsTo association.
\n\nassociations: [{\n type: 'belongsTo',\n model: 'User'\n}]\n
\nThe name of the model is on the other end of the association (e.g. if a User model hasMany Orders, this is\n'Order')
\nThe name of the model that 'owns' the association
\nThe name of the model that 'owns' the association
\nGet the reference to the current class from which this object was instantiated. Unlike statics,\nthis.self
is scope-dependent and it's meant to be used for dynamic inheritance. See statics\nfor a detailed comparison
Ext.define('My.Cat', {\n statics: {\n speciesName: 'Cat' // My.Cat.speciesName = 'Cat'\n },\n\n constructor: function() {\n alert(this.self.speciesName); // dependent on 'this'\n },\n\n clone: function() {\n return new this.self();\n }\n});\n\n\nExt.define('My.SnowLeopard', {\n extend: 'My.Cat',\n statics: {\n speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'\n }\n});\n\nvar cat = new My.Cat(); // alerts 'Cat'\nvar snowLeopard = new My.SnowLeopard(); // alerts 'Snow Leopard'\n\nvar clone = snowLeopard.clone();\nalert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'\n
\nCall the original method that was previously overridden with override
\n\nExt.define('My.Cat', {\n constructor: function() {\n alert(\"I'm a cat!\");\n }\n});\n\nMy.Cat.override({\n constructor: function() {\n alert(\"I'm going to be a cat!\");\n\n this.callOverridden();\n\n alert(\"Meeeeoooowwww\");\n }\n});\n\nvar kitty = new My.Cat(); // alerts \"I'm going to be a cat!\"\n // alerts \"I'm a cat!\"\n // alerts \"Meeeeoooowwww\"\n
\n This method has been deprecated
\nas of 4.1. Use callParent instead.
\n\nThe arguments, either an array or the arguments
object\nfrom the current method, for example: this.callOverridden(arguments)
Returns the result of calling the overridden method
\nCall the \"parent\" method of the current method. That is the method previously\noverridden by derivation or by an override (see Ext.define).
\n\n Ext.define('My.Base', {\n constructor: function (x) {\n this.x = x;\n },\n\n statics: {\n method: function (x) {\n return x;\n }\n }\n });\n\n Ext.define('My.Derived', {\n extend: 'My.Base',\n\n constructor: function () {\n this.callParent([21]);\n }\n });\n\n var obj = new My.Derived();\n\n alert(obj.x); // alerts 21\n
\n\nThis can be used with an override as follows:
\n\n Ext.define('My.DerivedOverride', {\n override: 'My.Derived',\n\n constructor: function (x) {\n this.callParent([x*2]); // calls original My.Derived constructor\n }\n });\n\n var obj = new My.Derived();\n\n alert(obj.x); // now alerts 42\n
\n\nThis also works with static methods.
\n\n Ext.define('My.Derived2', {\n extend: 'My.Base',\n\n statics: {\n method: function (x) {\n return this.callParent([x*2]); // calls My.Base.method\n }\n }\n });\n\n alert(My.Base.method(10); // alerts 10\n alert(My.Derived2.method(10); // alerts 20\n
\n\nLastly, it also works with overridden static methods.
\n\n Ext.define('My.Derived2Override', {\n override: 'My.Derived2',\n\n statics: {\n method: function (x) {\n return this.callParent([x*2]); // calls My.Derived2.method\n }\n }\n });\n\n alert(My.Derived2.method(10); // now alerts 40\n
\nThe arguments, either an array or the arguments
object\nfrom the current method, for example: this.callParent(arguments)
Returns the result of calling the parent method
\nReturns a getter function to be placed on the owner model's prototype. We cache the loaded instance\nthe first time it is loaded so that subsequent calls to the getter always receive the same reference.
\nThe getter function
\nReturns a setter function to be placed on the owner model's prototype
\nThe setter function
\nGet a specialized reader for reading associated data
\nThe reader, null if not supplied
\nInitialize configuration for this class. a typical example:
\n\nExt.define('My.awesome.Class', {\n // The default config\n config: {\n name: 'Awesome',\n isAwesome: true\n },\n\n constructor: function(config) {\n this.initConfig(config);\n }\n});\n\nvar awesome = new My.awesome.Class({\n name: 'Super Awesome'\n});\n\nalert(awesome.getName()); // 'Super Awesome'\n
\nthis
\nRead associated data
\nThe record we're writing to
\nThe reader for the associated model
\nThe raw associated data
\nGet the reference to the class from which this object was instantiated. Note that unlike self,\nthis.statics()
is scope-independent and it always returns the class from which it was called, regardless of what\nthis
points to during run-time
Ext.define('My.Cat', {\n statics: {\n totalCreated: 0,\n speciesName: 'Cat' // My.Cat.speciesName = 'Cat'\n },\n\n constructor: function() {\n var statics = this.statics();\n\n alert(statics.speciesName); // always equals to 'Cat' no matter what 'this' refers to\n // equivalent to: My.Cat.speciesName\n\n alert(this.self.speciesName); // dependent on 'this'\n\n statics.totalCreated++;\n },\n\n clone: function() {\n var cloned = new this.self; // dependent on 'this'\n\n cloned.groupName = this.statics().speciesName; // equivalent to: My.Cat.speciesName\n\n return cloned;\n }\n});\n\n\nExt.define('My.SnowLeopard', {\n extend: 'My.Cat',\n\n statics: {\n speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'\n },\n\n constructor: function() {\n this.callParent();\n }\n});\n\nvar cat = new My.Cat(); // alerts 'Cat', then alerts 'Cat'\n\nvar snowLeopard = new My.SnowLeopard(); // alerts 'Cat', then alerts 'Snow Leopard'\n\nvar clone = snowLeopard.clone();\nalert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'\nalert(clone.groupName); // alerts 'Cat'\n\nalert(My.Cat.totalCreated); // alerts 3\n
\nAdd methods / properties to the prototype of this class.
\n\nExt.define('My.awesome.Cat', {\n constructor: function() {\n ...\n }\n});\n\n My.awesome.Cat.addMembers({\n meow: function() {\n alert('Meowww...');\n }\n });\n\n var kitty = new My.awesome.Cat;\n kitty.meow();\n
\nAdd / override static properties of this class.
\n\nExt.define('My.cool.Class', {\n ...\n});\n\nMy.cool.Class.addStatics({\n someProperty: 'someValue', // My.cool.Class.someProperty = 'someValue'\n method1: function() { ... }, // My.cool.Class.method1 = function() { ... };\n method2: function() { ... } // My.cool.Class.method2 = function() { ... };\n});\n
\nthis
\nBorrow another class' members to the prototype of this class.
\n\nExt.define('Bank', {\n money: '$$$',\n printMoney: function() {\n alert('$$$$$$$');\n }\n});\n\nExt.define('Thief', {\n ...\n});\n\nThief.borrow(Bank, ['money', 'printMoney']);\n\nvar steve = new Thief();\n\nalert(steve.money); // alerts '$$$'\nsteve.printMoney(); // alerts '$$$$$$$'\n
\nThe class to borrow members from
\nThe names of the members to borrow
\nthis
\nCreate a new instance of this Class.
\n\nExt.define('My.cool.Class', {\n ...\n});\n\nMy.cool.Class.create({\n someConfig: true\n});\n
\n\nAll parameters are passed to the constructor of the class.
\nthe created instance.
\nCreate aliases for existing prototype methods. Example:
\n\nExt.define('My.cool.Class', {\n method1: function() { ... },\n method2: function() { ... }\n});\n\nvar test = new My.cool.Class();\n\nMy.cool.Class.createAlias({\n method3: 'method1',\n method4: 'method2'\n});\n\ntest.method3(); // test.method1()\n\nMy.cool.Class.createAlias('method5', 'method3');\n\ntest.method5(); // test.method3() -> test.method1()\n
\nThe new method name, or an object to set multiple aliases. See\nflexSetter
\nThe original method name
\nGet the current class' name in string format.
\n\nExt.define('My.cool.Class', {\n constructor: function() {\n alert(this.self.getName()); // alerts 'My.cool.Class'\n }\n});\n\nMy.cool.Class.getName(); // 'My.cool.Class'\n
\nclassName
\nAdds members to class.
\nThis method has been deprecated since 4.1
\nUse addMembers instead.
\n\nOverride members of this class. Overridden methods can be invoked via\ncallParent.
\n\nExt.define('My.Cat', {\n constructor: function() {\n alert(\"I'm a cat!\");\n }\n});\n\nMy.Cat.override({\n constructor: function() {\n alert(\"I'm going to be a cat!\");\n\n this.callParent(arguments);\n\n alert(\"Meeeeoooowwww\");\n }\n});\n\nvar kitty = new My.Cat(); // alerts \"I'm going to be a cat!\"\n // alerts \"I'm a cat!\"\n // alerts \"Meeeeoooowwww\"\n
\n\nAs of 4.1, direct use of this method is deprecated. Use Ext.define\ninstead:
\n\nExt.define('My.CatOverride', {\n override: 'My.Cat',\n constructor: function() {\n alert(\"I'm going to be a cat!\");\n\n this.callParent(arguments);\n\n alert(\"Meeeeoooowwww\");\n }\n});\n
\n\nThe above accomplishes the same result but can be managed by the Ext.Loader\nwhich can properly order the override and its target class and the build process\ncan determine whether the override is needed based on the required state of the\ntarget class (My.Cat).
\nThis method has been deprecated since 4.1.0
\nUse Ext.define instead
\n\nThe properties to add to this class. This should be\nspecified as an object literal containing one or more properties.
\nthis class
\n