/** * @author Ed Spencer * @class Ext.data.PolymorphicAssociation * @extends Ext.data.Association * @ignore */ Ext.data.PolymorphicAssociation = Ext.extend(Ext.data.Association, { constructor: function(config) { Ext.data.PolymorphicAssociation.superclass.constructor.call(this, config); var ownerProto = this.ownerModel.prototype, name = this.name; Ext.applyIf(this, { associationIdField: this.ownerName.toLowerCase() + "_id" }); ownerProto[name] = this.createStore(); }, /** * @private * Creates the association function that will be injected on the ownerModel. Most of what this is doing * is filtering the dataset down to the appropriate model/id combination, and adding modelDefaults to * any model instances that are created/inserted into the generated store. * @return {Function} The store-generating function */ createStore: function() { var association = this, ownerName = this.ownerName, storeName = this.name + "Store", associatedModel = this.associatedModel, primaryKey = this.primaryKey, associationIdField = 'associated_id', associationModelField = 'associated_model'; return function() { var me = this, modelDefaults = {}, config, filters; if (me[storeName] == undefined) { filters = [ { property : associationIdField, value : me.get(primaryKey), exactMatch: true }, { property : associationModelField, value : ownerName, exactMatch: true } ]; modelDefaults[associationIdField] = me.get(primaryKey); modelDefaults[associationModelField] = ownerName; config = Ext.apply({}, association.storeConfig || {}, { model : associatedModel, filters : filters, remoteFilter : false, modelDefaults: modelDefaults }); me[storeName] = new Ext.data.Store(config); } return me[storeName]; }; } });