HTML 組件(HTML COMPONENTS)二
發(fā)布時(shí)間:2008-08-10 閱讀數(shù): 次 來源:網(wǎng)樂原科技
現(xiàn)在我們將我們注視的焦點(diǎn)轉(zhuǎn)向我們的日歷應(yīng)用例子,該應(yīng)用包括4個(gè)不同頁面,canlendar.html為最頂級HTML
文檔,該頁包含了calendar.htc HTC,而canlendar.htc有反過來包含兩個(gè)別的HTC:day.htc和today.htc,calendar.html
內(nèi)容如下:
<HTML XMLNS:MYCAL>
<HEAD>
<TITLE>Calendar Example</TITLE>
<?IMPORT NAMESPACE="MYCAL" IMPLEMENTATION="calendar.htc"/>
</HEAD>
<BODY>
<P>Click a day in the calendar to add or modify your schedule.</P>
<MYCAL:CALENDAR></MYCAL:CALENDAR>
</BODY>
</HTML>
有幾個(gè)要點(diǎn)您必須重點(diǎn)注意:第一、命名空間定義在〈HTML〉標(biāo)記中,我們需要使用在我們要調(diào)用的HTC中定義的命
名空間,在canlendar.htc中的命名空間是:MYCAL,所以在<HTML>標(biāo)記中必須出現(xiàn)XMLNS標(biāo)識。
<?IMPORT>標(biāo)記以問號開始以和別的正常標(biāo)記區(qū)別開,該標(biāo)記要求瀏覽器導(dǎo)入指定的HTC:calendar.htc,HTC可以
有多個(gè)命名空間,故在導(dǎo)入時(shí)需要指明要使用的命名空間(MYCAL):
<?IMPORT NAMESPACE="MYCAL" IMPLEMENTATION="calendar.htc"/>
HTC的主要優(yōu)點(diǎn)之一就是:瀏覽器將一直掛起頁面解析直到輸入文件全部被導(dǎo)入為止。頁面處理的異步機(jī)制將導(dǎo)致許多
問題,瀏覽器并不等元素已經(jīng)完全顯示才開始解析頁面,作為例子,你可以建立一個(gè)對象,并且在文擋的頂部訪問一個(gè)在頁面底
部的方法,如果對象因?yàn)槟承┰驗(yàn)闇?zhǔn)備好,你將會得到一個(gè)錯(cuò)誤指示沒有該對象不存在或該對象不支持你要訪問的方法,相信您
已經(jīng)碰到過此類事情了吧!不管這樣,?IMPORT 是同步的,并且瀏覽器會一直等待頁面導(dǎo)入完畢并且內(nèi)容準(zhǔn)備好。
頁面唯一而且重要的一行是調(diào)用自定義標(biāo)記MYCAL:CALENDAR:
<MYCAL:CALENDAR></MYCAL:CALENDAR>
因?yàn)轫撁嬉呀?jīng)導(dǎo)入,故該調(diào)用將會象在calendar.htc所指定的那樣建立一個(gè)日歷。
您可能已經(jīng)注意到HTC可以包含別的HTC,calendar.htc包括兩個(gè)別的HTML組件,每個(gè)月的所有日期:day.htc和與當(dāng)前日期
一致的today.htc,以下是canlendar.htc的頂部15行:
<HTML XMLNS:MYCAL XMLNS:TODAY XMLNS:ANYDAY>
<HEAD>
<?IMPORT NAMESPACE="ANYDAY" IMPLEMENTATION="day.htc"/>
<?IMPORT NAMESPACE="TODAY" IMPLEMENTATION="today.htc"/>
<PUBLIC:COMPONENT tagName="CALENDAR">
<ATTACH EVENT="oncontentready" ONEVENT="fnInit()"/>
</PUBLIC:COMPONENT>
<SCRIPT LANGUAGE="JavaScript">
<!--
function fnInit()
{
defaults.viewLink = document;
}
// -->
</SCRIPT>
第一行在這些HTC會用到的XML命名空間。這些命名空間即包括本頁自己要用到的,也包括頁面需調(diào)用的命名空間(ANYDAY
和 TODAY ),注意命名空間并不一定要和HTC文件文件名一致。接著,我們導(dǎo)入這些HTC:
<?IMPORT NAMESPACE="ANYDAY" IMPLEMENTATION="day.htc"/>
<?IMPORT NAMESPACE="TODAY" IMPLEMENTATION="today.htc"/>
當(dāng)我們解析到這些行,瀏覽器將一直等到要導(dǎo)入的文件被導(dǎo)入才繼續(xù)頁面解析(同步導(dǎo)入)。然后我們定義CALENDAR自定
義標(biāo)記:
<PUBLIC:COMPONENT tagName="CALENDAR">
<ATTACH EVENT="oncontentready" ONEVENT="fnInit()"/>
</PUBLIC:COMPONENT>
PUBLIC:COMPONENT用來描述CALENDAR標(biāo)記,在開始和結(jié)束標(biāo)記之間,您可以將事件附加到CALENDAR標(biāo)記上,事件oncontentready
將在calendar.htc文件全部被導(dǎo)入,并被解析時(shí),指定處理時(shí)間的是定義在JAVASCRIPT的函數(shù):fnInit():
<SCRIPT LANGUAGE="JavaScript">
<!--
function fnInit()
{
defaults.viewLink = document;
}
// -->
</SCRIPT>
viewLink指定的值非常重要,它是HTML組件的基礎(chǔ),它連接了HTML組件和調(diào)用該HTML組件的頁面,defaults對象有別的屬性并且會
在別的地方被覆蓋,我們給viewLink屬性賦的是HTML文檔對象,正因?yàn)樵撨B接,我們才可以建立HTC組件和包含頁面互訪。
我們將在后面解釋日歷的層。注意,盡管在日歷中當(dāng)月的當(dāng)天框和其他天框、空框的樣式不一樣,但是我們通過優(yōu)先級法則來實(shí)現(xiàn)
在包含頁中,HTML組件忽略任何相互沖突的樣式定義。calendar.htc的樣式定義如下:
<STYLE>
TD {
background-color:tan;
width:50;
height:50;
}
</STYLE>
現(xiàn)在將該定義和日歷比較,只有空框是的顏色是黃褐色的,我們調(diào)用的HTC忽略了這些定義,被調(diào)用的頁面都嵌入了頁面定制。以下
調(diào)用TODAY:DAY HTML組件:
<TODAY:DAY value=' + dayOfMonth + '></TODAY:DAY>
我們只是簡單的傳入了當(dāng)月中的第幾天,同樣的調(diào)用ANYDAY:DAY 也是簡單的傳入當(dāng)月中的第幾天:
<ANYDAY:DAY value=' + dayOfMonth + '></ANYDAY:DAY>