鉴于不同浏览器对属性描述符的支持并不统一, KISSY 模拟实现了属性描述符, 提供属性的获取和设置操作, 即属性的 getter 和 setter 动作.
Methods
addAttr
void addAttr( name, attrConfig )
给宿主对象增加一个属性.
- Parameters:
-
name
<String>
属性名. -
attrConfig
<attrConfig>
属性配置信息, 支持下面的配置项:
{ value: 'the default value', // 属性默认值 valueFn: function // 提供属性默认值的函数 setter: function // 写属性 getter: function // 读属性 }
如果配置项中没有设置 value, 会调用 valueFn 函数获取默认值并赋给 value.
addAttrs
void addAttrs( attrConfigs, values )
批量添加属性.
- Parameters:
-
attrConfigs
<Object>
属性名/配置信息对. -
values
<values>
属性名/值对, 该值为属性的默认值, 会覆盖配置信息中的默认值.
hasAttr
void hasAttr( name )
判断是否有名为 name 的属性.
removeAttr
void removeAttr( name )
删除名为 name 的属性.
set
void set( name, value )
设置属性 name 的值为 value.
get
void get( name )
获取属性 name 的值.
当没有设置属性值时, 会取该属性的默认值.
reset
void reset( name )
重置属性 name 为初始值. 如果不给出属性名, 默认将所有属性名全部重置为初始值.
重置属性值, 同样会触发 "beforeAttrNameChange" 和 "afterAttrNameChange" 事件.
Events
beforeAttrNameChange
名为 "attrName" 的属性, 在改变它的值之前触发该事件.
afterAttrNameChange
名为 "attrName" 的属性, 在改变它的值之后触发该事件.
示例
KISSY.ready(function(S) {
// 自定义类
function myClass() {
}
// 让你的类支持属性描述符
S.augment(myClass, S.Attribute);
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);
},
getter: function(v) {
return v;
}
});
// 绑定事件
cls.on('afterSizeChange', function(ev){
console.log('change '+ ev.attrName + ': '+ev.prevVal+' --> '+ev.newVal);
});
// 设置属性
cls.set('size', 20);
// 获取属性
alert(cls.get('size'));
// 重置
cls.reset();
alert(cls.get('size'));
});
如果你想让类默认就支持 attribute 功能, 请直接继承 S.Base .
home › base :