一. 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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章