1 var comb = require("comb"), 2 hitch = comb.hitch, 3 Promise = comb.Promise, 4 PromiseList = comb.PromiseList, 5 _Association = require("./_Association"); 6 /** 7 * @class Class to define a many to one association. 8 * 9 * </br> 10 * <b>NOT to be instantiated directly</b> 11 * Its just documented for reference. 12 * 13 * @name ManyToOne 14 * @augments _Association 15 * 16 * */ 17 module.exports = exports = comb.define(_Association, { 18 instance : { 19 _fetchMethod : "one", 20 21 //override 22 //@see _Association 23 _postLoad : function(next, self) { 24 if (self.isEager()) { 25 self.fetch(this).then(hitch(this, function(result) { 26 this[self.loadedKey] = true; 27 this["_" + self.name] = result; 28 next(); 29 })); 30 } else { 31 next(); 32 } 33 }, 34 35 //override 36 //@see _Association 37 _getter : function(self) { 38 //if we have them return them; 39 var loadedKey = self.loadedKey, name = self.name; 40 //todo make all lazy models always return a Promise 41 if (this[loadedKey]) return this["_" + name]; 42 //Else we dont have 43 if (this.isNew) throw new Error("Model is a new object and no associations have been fetched"); 44 var retPromise = new Promise(); 45 self.fetch(this).then(hitch(this, function(result) { 46 this[loadedKey] = true; 47 var m = result; 48 this["_" + name] = m; 49 retPromise.callback(m); 50 }), hitch(retPromise, "errback")); 51 return retPromise; 52 }, 53 54 //override 55 //@see _Association 56 _setter : function(cal, self) { 57 var name = self.name; 58 if (this.isNew) { 59 if (!(val instanceof self.model)) { 60 val = new self.model(val); 61 } 62 this["_" + name] = val; 63 } else { 64 //set my foreign key 65 if (!(val instanceof self.model)) { 66 val = new self.model(val); 67 } 68 this[self.leftKey] = val[self.rightKey]; 69 this["_" + name] = val; 70 } 71 } 72 } 73 });