示例#1
0
 removeRelationship(/* index, id, instance or sourceId, targetId */) {
   const me = this;
   const args = lang.toArray(arguments);
   let relationship;
   if (args.length === 1) {
     relationship = args[0];
     if (!(relationship instanceof Relationship)) {
       if (lang.isNumber(relationship)) {
         relationship = me.relationships[relationship];
       } else if (lang.isString(relationship)) {
         relationship = me.relationshipById[relationship];
       }
     }
   } else {
     const sourceId = args[0];
     const targetId = args[1];
     const attrs = {};
     attrs[CONST.ATTR_END1] = sourceId;
     attrs[CONST.ATTR_END2] = targetId;
     const relationshipNode = utils.findChildNode(me.relationshipsNode, {
       tagName: CONST.TAG_RELATIONSHIP,
       attributes: attrs,
     });
     if (relationshipNode) relationship = me.relationshipById[relationshipNode.getAttribute(CONST.ATTR_ID)];
   }
   if (relationship) {
     delete me.relationshipById[relationship.id];
     me.relationships = lang.difference(me.relationships, [relationship]);
     relationship.destroy();
     return me.setModifiedTime();
   }
   return me;
 }
示例#2
0
function declare(/* name, superClasses, protoObj */) {
  const args = lang.toArray(arguments);
  const lin = '_linearization';
  const Tmp = function Tmp() {};
  const name = lang.isString(args[0]) ? args.shift() : '';
  let superClasses = lang.isArray(args[0]) || lang.isFunction(args[0]) ? args.shift() : [];
  superClasses = lang.isArray(superClasses) ? superClasses : [superClasses];
  const finalProtoObj = args[0] ? args.shift() : {};

  let bases = [];

  lang.each(superClasses, (clazz) => {
    clazz[lin] = clazz[lin] || [clazz];
    bases.push(clazz[lin]);
  });

  if (bases.length) {
    bases.push(superClasses);
    bases = c3mroMerge.apply(null, bases);
  }

  let ctor = function ctor() {};
  const tempConstructor = finalProtoObj.constructor;
  if (tempConstructor !== Object.prototype.constructor) {
    ctor = tempConstructor;
  }

  ctor[lin] = [ctor].concat(bases);
  ctor.parents = lang.toArray(bases);

  let protoObj = {};
  let uberClass;
  while ((uberClass = bases.pop())) {
    protoObj = lang.extend(protoObj, uberClass.prototype);
    Tmp.prototype = protoObj;
    protoObj.constructor = uberClass;
    protoObj = new Tmp();
  }

  ctor.className = name;
  ctor.prototype = protoObj;
  ctor.prototype.constructor = ctor;

  lang.extend(ctor.prototype, finalProtoObj);

  return ctor;
}