-
Notifications
You must be signed in to change notification settings - Fork 5
Open
Description
/**
* Calls the callback for each relationship defined on the model.
*
* @method eachRelationship
* @for Model
* @param {Function} callback Function that takes `name` and `meta` parameters
* @param [binding] Object to use as `this`
* @static
*/
eachRelationship: function(callback, binding) {
// Climb through class hierarchy looking for relationships
// (###TODO: Might be nice to wire this up when creating the class hierarchy if possible.)
var classProto = this.prototype;
while (classProto && classProto.metaMap) {
if (classProto.metaMap['_all']) {
for (var j = 0, len = classProto.metaMap['_all'].length; j < len; ++j) {
var name = classProto.metaMap['_all'][j];
callback.call(binding, name, classProto.metaMap[name]);
}
}
// Might be better to do this in initialization somewhere rather than on every eachRelationship call;
// however, only costs one typeof and one string match each call
if (typeof Object.getPrototypeOf !== 'function') {
if (typeof 'test'.__proto__ === 'object') { // eslint-disable-line no-proto
Object.getPrototypeOf = function(object) {
return object.__proto__; // eslint-disable-line no-proto
};
} else {
Object.getPrototypeOf = function(object) {
// May break if the constructor has been tampered with
return object.constructor.prototype;
};
}
}
classProto = Object.getPrototypeOf(classProto);
}
},Could be beneficial to avoid this on each, even though the performance hit is not too terrible
Metadata
Metadata
Assignees
Labels
No labels