一.什麼是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下代碼.