|
|
@@ -0,0 +1,58 @@ |
|
|
YUI.add('root-cls', function (Y) { |
|
|
Y.Base._buildCfg.aggregates.push('getClassAttrs'); |
|
|
|
|
|
Y.rootClass = Y.Base.create('root-class', Y.Base, [], { |
|
|
someInstanceMethod : function () {} |
|
|
}, { |
|
|
ATTRS : { |
|
|
test : { |
|
|
validator : Y.Lang.isBoolean |
|
|
} |
|
|
} |
|
|
}); |
|
|
|
|
|
Y.rootExt = Y.Base.create('root-ext', Y.Base, [], {}, { |
|
|
getClassAttrs : function () { |
|
|
var attrs = {}, |
|
|
c = this.prototype.constructor; |
|
|
|
|
|
while (c) { |
|
|
Y.mix(attrs, c.ATTRS, true); |
|
|
c = (c.superclass ? c.superclass.constructor : null); |
|
|
} |
|
|
|
|
|
return attrs; |
|
|
} |
|
|
}); |
|
|
|
|
|
}, '1.0', {requires : ['base']}); |
|
|
|
|
|
YUI().use('root-cls', function (Y) { |
|
|
var mainClass = Y.Base.create('main-class', Y.rootClass, [Y.rootExt], {}, { |
|
|
ATTRS : { |
|
|
foo : { |
|
|
validator : Y.Lang.isNumber |
|
|
}, |
|
|
bar : { |
|
|
validator : Y.Lang.isString |
|
|
} |
|
|
} |
|
|
}); |
|
|
|
|
|
console.log('class method: ', mainClass.getClassAttrs) |
|
|
console.log('class instanceof: ', new mainClass() instanceof Y.rootClass); |
|
|
console.log('class attrs: ', mainClass.getClassAttrs()); |
|
|
|
|
|
var mySubClass = Y.Base.create('my-subclass', mainClass, [Y.rootExt], {}, { |
|
|
ATTRS : { |
|
|
baz : { |
|
|
validator : Y.Lang.isBoolean, |
|
|
value : false |
|
|
} |
|
|
} |
|
|
}); |
|
|
|
|
|
console.log('subclass method: ', mySubClass.getClassAttrs) |
|
|
console.log('subclass instanceof: ', new mySubClass() instanceof Y.rootClass); |
|
|
console.log('subclass attrs: ', mySubClass.getClassAttrs()); |
|
|
}); |