Attribute

Class

Class Detail

class base.Attribute
Attribute ()
包含一些属性操作的方法,仅用于 augment()

Methods Detail

Attribute.prototype.addAttr()
void addAttr ( name, attrConfig )
给宿主对象增加一个属性.
Parameters:
  • name (String) – 属性名
  • attrConfig (Object) – 属性配置信息, 支持下面的配置项:
  • attrConfig.value (String|Number) – 属性默认值。注意默认值请不要设置为复杂对象(通过自定义构造器 new 出来的),复杂对象可设置 valueFn 返回。
  • attrConfig.valueFn (Function) – 提供属性默认值的函数,传入对象内部对应的属性值和属性名,取该函数的返回值作为最终值给用户。
  • attrConfig.setter (Function) – 写属性时的处理函数,传入从 set() 参数得到的属性值和属性名,如果返回非 undefined 则作为新的属性设置值。
  • attrConfig.getter (Function) – 读属性时的处理函数
  • attrConfig.validator (Function) – 写属性时的验证函数,传入从 set() 参数得到的属性值和属性名,返回 false 则不改变该属性值.

Note

如果配置项中没有设置 value, 会调用 valueFn 函数获取默认值并赋给 value.

Attribute.prototype.addAttrs()
void addAttrs ( attrConfigs, values )
批量添加属性.
Parameters:
  • attrConfigs (Object) – 属性名/配置信息对.
  • values (Object) – 属性名/值对, 批量设置当前对象的属性值.
Attribute.prototype.hasAttr()
boolean hasAttr ( name )
判断是否有名为 name 的属性.
Parameters:name (String) – 属性名
Attribute.prototype.removeAttr()
void removeAttr ( name )
删除名为 name 的属性.
Parameters:name (String) – 属性名
Attribute.prototype.set()
boolean set ( name, value, opts )
设置属性 name 的值为 value.
Parameters:
  • name (String) –

    属性名。

    也可以为 “x.y” 形式,此时要求 x 属性为包含 y 属性的普通 Object,这时会设置 x 属性值的 y 属性.但只会触发 x 的相关 change 事件.

  • value (String) – 属性的值
  • opts (Object) –

    控制对象,包括以下控制选项

    opts.silent

    {boolean} - 默认 false , 是否触发 change 系列事件.

Returns:

该次属性设置是否生效(是否通过了 validator 验证)

boolean set ( json, opts )
批量设置属性值.
Parameters:
  • json (String) – 属性名与属性值的键值对
  • opts (Object) –

    控制对象,包括以下控制选项

    opts.silent

    {boolean} - 默认 false , 是否触发 change 系列事件.

Returns:

该批属性设置是否全部生效(是否通过了 validator 验证)

Attribute.prototype.get()
* get ( name )
获取属性 name 的值.
Parameters:name (String) –

属性名

也可以为 “x.y” 形式. 此时要求 x 属性为包含 y 属性的普通 Object。

Note

当没有设置属性值时, 会取该属性的默认值.

Attribute.prototype.reset()
void reset ( name,opts )
重置属性 name 为初始值. (调用一次 set() )
Parameters:
  • name (String) – 属性
  • opts (Object) –

    控制对象,包括以下控制选项

    reset.opts.silent

    {boolean} - 默认 false , 是否触发 change 系列事件.

void reset ( opts )
将所有属性全部重置为初始值. (调用一次 set() )
Parameters:opts (Object) –

控制对象,包括以下控制选项

reset.opts.silent

{boolean} - 默认 false , 是否触发 change 系列事件.

Events Detail

Attribute.prototype.beforeAttrNameChange()
beforeAttrNameChange (e)
名为 “attrName” 的属性, 在改变它的值之前触发该事件.
Parameters:
  • e.newVal (*) – 将要改变到的属性值
  • e.prevVal (*) – 当前的属性值
  • e.attrName (String) – 当前的属性名,例如 “x”
  • e.subAttrName (String) – 当前的完整属性名,例如 “x.y”
Attribute.prototype.afterAttrNameChange()
afterAttrNameChange (e)
名为 “attrName” 的属性, 在改变它的值之后触发该事件.
Parameters:
  • e.newVal (*) – 当前的属性值
  • e.prevVal (*) – 当前改变前的属性值
  • e.attrName (String) – 当前的属性名,例如 “x”
  • e.subAttrName (String) – 当前的完整属性名,例如 “x.y”
Attribute.prototype.*Change()
*Change (e)
每调用 set() 一次后就触发一次该事件.
Arguments:
  • e.attrName (Array) – 本次 set 导致改变的属性名集合
  • e.subAttrName (Array) – 本次 set 导致的属性全名集合
  • e.newVal (Array) – 本次 set 导致的属性当前值集合
  • e.prevVal (Array) – 本次 set 导致的属性在 set 前的值集合

Note

  1. 自定义类不建议直接 argument Attribute ,请继承 Base
  2. *Change 和 afterAttrNameChange 监视一个即可,不要同时监视

Demo

KISSY.ready(function(S) {
    // 自定义类
    function myClass() {
    }

    // 让你的类支持属性描述符
    S.augment(myClass, S.Base.Attribute,S.EventTarget);

    var cls = new myClass();

    // 增加属性
    cls.addAttr('size', {
        value: 0,
        setter: function(v) {
            if (S.isString(v) && v.indexOf('inch')!== -1) {
                return parseFloat(v)*10/3;
            }
            return parseFloat(v);
        }
    });

    // 绑定事件
    cls.on('afterSizeChange', function(ev){
        console.log('change '+ ev.attrName + ': '+ev.prevVal+' --> '+ev.newVal);
    });

    cls.on('*Change', function(ev){
        console.log('change '+ ev.attrName + ': '+ev.prevVal+' --> '+ev.newVal);
    });

    // 设置属性
    cls.set('size', 20);

    cls.set({
        x:1,
        y:2
    });

    // 获取属性
    alert(cls.get('size'));

    // 重置
    cls.reset();
    alert(cls.get('size'));
});