README revision e2be19408a54a8ec1c9e810ea4eaa2f0ac7cda07
319f8f820db4356edaff70c2e019376e1ec71487vboxsyncBase is designed to be a low level class from which other attribute
319f8f820db4356edaff70c2e019376e1ec71487vboxsyncand event target based classes in the YUI library can be derived.
319f8f820db4356edaff70c2e019376e1ec71487vboxsyncIt provides a standard template for creating attribute based objects
319f8f820db4356edaff70c2e019376e1ec71487vboxsyncacross the library and provides a consistent init() and destroy()
319f8f820db4356edaff70c2e019376e1ec71487vboxsyncsequence, by chaining initialization (initializer) and destruction
319f8f820db4356edaff70c2e019376e1ec71487vboxsync(destructor) methods for the class hierarcy.
a3e5b1cf4ab5395f45b7ed855c72f70e4bcf4219vboxsync* No changes
a3e5b1cf4ab5395f45b7ed855c72f70e4bcf4219vboxsync* As the final step in the destroy phase, Base now does a detachAll() to avoid invoking listeners
a3e5b1cf4ab5395f45b7ed855c72f70e4bcf4219vboxsync which may be waiting to be in an async. step which occurs after destruction.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* "init" and "destroy" events are now published with the defaultTargetOnly property set to true
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Added support for MyClass.EVENT_PREFIX to allow developers
319f8f820db4356edaff70c2e019376e1ec71487vboxsync to define their own event prefix
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Made "init" and "destroy" events fireOnce:true (along with
319f8f820db4356edaff70c2e019376e1ec71487vboxsync "render" in Widget), so that subscriptions made after the
319f8f820db4356edaff70c2e019376e1ec71487vboxsync events are fired, are notified immediately.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Dynamic and non-dynamically built classes now have their
319f8f820db4356edaff70c2e019376e1ec71487vboxsync extensions instantiated the same way - during _initHierarchy.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Updated ATTRS handling for Base.build, so that ATTRS are
319f8f820db4356edaff70c2e019376e1ec71487vboxsync also aggregated at the attribute configuration object level,
319f8f820db4356edaff70c2e019376e1ec71487vboxsync allowing extensions to add to, or overwrite, attribute
319f8f820db4356edaff70c2e019376e1ec71487vboxsync configuration properties on the host.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Added sugar Base.create and Base.mix methods on top of
319f8f820db4356edaff70c2e019376e1ec71487vboxsync Base.build, to simplify the 2 main use cases:
319f8f820db4356edaff70c2e019376e1ec71487vboxsync 1). Creating a completely new class which uses extensions.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync 2). Mixing in extensions to an existing class.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Documented non-attribute on, after, bubbleTargets and plugins
319f8f820db4356edaff70c2e019376e1ec71487vboxsync property support in the Base constructor config argument
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Fixed hasImpl method on built classes, to look up the class
319f8f820db4356edaff70c2e019376e1ec71487vboxsync hierarchy for applied extensions.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Plugin.Host removed from base-base module and delivered as it's
319f8f820db4356edaff70c2e019376e1ec71487vboxsync own module - "pluginhost"
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* base broken up into..
319f8f820db4356edaff70c2e019376e1ec71487vboxsync base-base: Provides class hierarchy support for ATTRS and
319f8f820db4356edaff70c2e019376e1ec71487vboxsync initialization
319f8f820db4356edaff70c2e019376e1ec71487vboxsync base-build: Provides Extension support in the form of
319f8f820db4356edaff70c2e019376e1ec71487vboxsync base-pluginhost: Augments Plugin.Host to Base, adding plugin
319f8f820db4356edaff70c2e019376e1ec71487vboxsync3.0.0 beta 1
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Config argument for init event now merged into the event facade,
319f8f820db4356edaff70c2e019376e1ec71487vboxsync instead of being passed separately (available as e.cfg).
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Removed Base.create. On review, considered to be overkill.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync Users can easily create new instances, using Base.build
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Moved PluginHost down from Widget to Base, since utils and
319f8f820db4356edaff70c2e019376e1ec71487vboxsync Node will also support Plugins.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* PluginHost.plug and unplug now accept the plugin class as
319f8f820db4356edaff70c2e019376e1ec71487vboxsync arguments [plug(pluginClass, cfg) and unplug(pluginClass)].
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Split base module up into base-base and base-build.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Added lazy attribute initialization support, to improve performance.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync This also removes order dependency when processing ATTRS for a
319f8f820db4356edaff70c2e019376e1ec71487vboxsync particular class.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync If a get/set call is made for an uninitialized attribute A, in the
319f8f820db4356edaff70c2e019376e1ec71487vboxsync getter/setter/validator or valueFns of another attribute B, A will
319f8f820db4356edaff70c2e019376e1ec71487vboxsync be intiailized on the fly.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Added ability to subscribe to on/after events through the
319f8f820db4356edaff70c2e019376e1ec71487vboxsync constructor config object, e.g.:
319f8f820db4356edaff70c2e019376e1ec71487vboxsync new MyBaseObject({
319f8f820db4356edaff70c2e019376e1ec71487vboxsync init: handlerFn,
319f8f820db4356edaff70c2e019376e1ec71487vboxsync myAttrChange: handlerFn
319f8f820db4356edaff70c2e019376e1ec71487vboxsync init: handlerFn,
319f8f820db4356edaff70c2e019376e1ec71487vboxsync myAttrChange: handlerFn
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Developers can now override the default clone behavior we use to
319f8f820db4356edaff70c2e019376e1ec71487vboxsync isolate default ATTRS config values, using cloneDefaultValue, e.g.:
319f8f820db4356edaff70c2e019376e1ec71487vboxsync value: AnObjectOrArrayReference
319f8f820db4356edaff70c2e019376e1ec71487vboxsync cloneDefaultValue: true|false|"deep"|"shallow"
319f8f820db4356edaff70c2e019376e1ec71487vboxsync If the cloneDefaultValue property is not defined, Base will clone
319f8f820db4356edaff70c2e019376e1ec71487vboxsync any Arrays or Object literals which are used as default values when
319f8f820db4356edaff70c2e019376e1ec71487vboxsync configuring attributes for an instance, so that updates to instance
319f8f820db4356edaff70c2e019376e1ec71487vboxsync values do not modify the default value.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync This behavior can be over-ridden using the cloneDefaultValue property:
319f8f820db4356edaff70c2e019376e1ec71487vboxsync true, deep:
319f8f820db4356edaff70c2e019376e1ec71487vboxsync Use Y.clone to protect the default value.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync Use Y.merge, to protect the default value.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync Don't clone Arrays or Object literals. The value is intended
319f8f820db4356edaff70c2e019376e1ec71487vboxsync to be used by reference, for example, when it points to
319f8f820db4356edaff70c2e019376e1ec71487vboxsync a utility object.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Base.plug and Base.unplug used to add static Plugins (default plugins
319f8f820db4356edaff70c2e019376e1ec71487vboxsync for a class). Replaces static PLUGINS array, allowing subclasses to
319f8f820db4356edaff70c2e019376e1ec71487vboxsync easily unplug static plugins added higher up in the hierarchy.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync* Base adds all attributes lazily. This means attributes don't get
319f8f820db4356edaff70c2e019376e1ec71487vboxsync initialized until the first call to get/set, speeding up construction
319f8f820db4356edaff70c2e019376e1ec71487vboxsync of Base based objects.
4416c4532cd042735f08cdc4c5ea825f4faf6b25vboxsync Attributes which have setters which set some other state in the object,
319f8f820db4356edaff70c2e019376e1ec71487vboxsync can configure the attribute to disable lazy initialization, by setting
4416c4532cd042735f08cdc4c5ea825f4faf6b25vboxsync lazyAdd:false as part of their attribute configuration, so that the setter
319f8f820db4356edaff70c2e019376e1ec71487vboxsync gets invoked during construction.
319f8f820db4356edaff70c2e019376e1ec71487vboxsync3.0.0PR1 - Initial release