ZUI attribute

ZUI attribute

Summary

ZUI attribute provides revert() , toggle() , set_again(), sync(), unsync() methods for Attribute.

Description

This module provides 5 more methods for Attribute:

  • revert() : rollback attribute value to previous one

  • toggle() : set attribute value to opposite boolean

  • set_again() : set attribute value to current value, use this to trigger setter function or change event again.

  • sync() : sync an attribute from other Object when the attribute value of other object changed, everytime.

  • unsync() : remove the sync binding.

Note

  • do not use toggle() on none boolean value. It works, but the result may changed in future version.

  • Now revert() is disabled by default for performance. You can set _doRevert property to true to enable revert() for all properties, or set _revertList as {propertyName: true, …} hash for specified properties.

  • YUI Base object mixed Attribute when Y.use(‘base’) , if you try to Y.mix(Y.AttributeCore.prototype, Y.zui.Attribute.prototype, true) , it seens not work. 2 ways to resolve this:

    1 Y.mix(Y.Base.prototype, Y.zui.Attribute.prototype, true);

    2 Y.mix(Y.AttributeCore.prototype, Y.zui.Attribute.prototype, true); then Y.use(‘base’, …);

  • Same with previous, you may need to Y.mix() Widget or all other Base child classes.

  • You may use Y.mix(ClassA, ClassB, true, null, 1) to mix on prototype, check document: http://yuilibrary.com/yui/docs/api/classes/YUI.html#method_mix . I like to use .protype directly, it makes code more readable.

Known Issue

  • set() will be tracked after Y.zui.Attribute mix into your class, then revert() use tracked value information to work. So, revert() can not get older values before Y.zui.Attribute mixed.

Code Sample

// Add ZUI attribute support to one instance
Y.mix(myInstance, Y.zui.Attribute.prototype);

// enable revert() on 'testAttr2'
myInstance._revertList = {testAttr2: true};

// Or, enable revert() on all attributes
myInstance._doRevert = true;

// Now, set an attribute
myInstance.set('testAttr', 3);

// And you can revert the attribute
myInstance.revert('testAttr');

// Sync an attribute from another object
// Everytime objterObject.get('testAttr') changed, set() the value to myInstance
myInstance.sync('testAttr', otherObject);

// Sync an attribute from another object, specify a different attribute name
// Everytime objterObject.get('Attr2') changed, set() the value to myInstance
myInstance.sync('testAttr', otherObject, 'Attr2');

// Stop to monitering the attribute change
myInstance.unsync('testAttr', otherObject);


// Or, add ZUI attribute support to a class (before creating any instance) 
Y.mix(myClass.prototype, Y.zui.Attribute.prototype);

// Now, all myClass instances support revert(), toggle(), etc ...
var testInstance = new myClass();
testInstance.toggle('testAttr');

// Add ZUI attribute support for all Attribute object
Y.mix(Y.Attribute.prototype, Y.zui.Attribute.prototype, true);

// Add ZUI attribute support for all Base object
Y.mix(Y.Base.prototype, Y.zui.Attribute.prototype, true);

Make a Donation