一.什么是behavior
behavior 是HTMLayout界面引擎扩展的特殊css属性.通过CSS样式制定behavior, 可以为任何元素附加上交互行为, 从而将元素附件特定功能的控件或者是组合控件.所有behavior 都是预先写好的.
二.behavior类成员
// behavior list support
behavior* next;
const char* name; // name must be a pointer to a static string
看到这里是否会想到学C的时候链表.没错,next指向的就是下一个behavior老巢,name顾名思义就是名字咯(这个名字全局唯一).再看其中一静态成员函数
// implementation of static list of behaviors
static behavior* root(behavior* to_set = 0)
{
static behavior* _root = 0;
if(to_set) _root = to_set;
return _root;
}
注释已经说明"static list of behaviors"也就是一个全局的behavior链表.再看构造函数做了什么:
behavior(UINT subsriptions, const char* external_name)
:next(0),name(external_name), event_handler(subsriptions)
{
// add this implementation to the list (singleton)
next = root();
root(this);
}
果然,在构造一个behavior的时候已经将其加入到链表当中(当然你看到SDK中的behavior实例都是全局的---这是必须的).OK 再看一个静态成员
static event_handler* find(const char* name, HELEMENT he)
{
for(behavior* t = root(); t; t = t->next)
if(strcmp(t->name,name)==0)
{
return t->attach(he);
}
return 0; // not found
}
已经说明了是根据名字检索出该behavior.(所以上面提到name必须是唯一滴)
三.什么时候为元素附件指定的behavior
转到notification_handler类看看先.主要关注HLN_ATTACH_BEHAVIOR事件,看看on_attach_behavior的实现就会豁然开朗
四.举例
<div syle="behavior:button"> div元素模仿button元素 </div>
该元素就有了button元素的功能. 当然这是内置behavior,我们也可以制定自己的behavior,详细看SDK下边behavior下代码.