一. Htmlayout之behavior

一.什么是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下代码.

 

 

发布了36 篇原创文章 · 获赞 16 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章