研究了ext很久了,一直想為ext直接封裝一個(gè)服務(wù)端組件??紤]到ext組件的構(gòu)建都是需要使用js來(lái)完成,那么服務(wù)端生成的代碼也就是js而不是html。
如果采取純Ajax的方式,類(lèi)似于Echo2的構(gòu)造,不過(guò)這樣對(duì)于Session可能是一個(gè)負(fù)擔(dān),同時(shí)可能會(huì)造成服務(wù)端的擁堵。不過(guò)使用純Ajax有個(gè)好處,就是js只需要裝載一次就行了。而如果使用各個(gè)不同的頁(yè)面方式,則需要多次裝載ext的js文件,這對(duì)于網(wǎng)絡(luò)也是一個(gè)壓力。
不過(guò)創(chuàng)建的初衷,此框架主要還是使用于內(nèi)部網(wǎng),這樣對(duì)于性能方面的擔(dān)心可以略過(guò)了。
設(shè)計(jì)流程如下:
類(lèi)似于Jsf的請(qǐng)求流程,提供Lifecycle,基本上也就五個(gè)生命周期,apply request,process validators,update model,invokeAction,render ajax。
先不考慮其他的生命周期,先來(lái)處理render ajax部分?;緲?gòu)思還是以render xml為主,主要的格式如下:
<message xmlns="http://www.esoft.org/servermessage">
<lib>
<js url="widgets/ext-component"/>
</lib>
<script>Ext.QuickTips.init();</script>
<content cid="W9"><div id="W39"/></content>
<remove>Ext.get('W29').remove();</remove>
</message>
lib 中主要用來(lái)裝載ext的各個(gè)組件js,這樣不需要一次裝載。
script,主要的執(zhí)行js腳本
content用于創(chuàng)建相應(yīng)的html
remove相應(yīng)的刪除js腳本
為什么需要增加remove而不是把所有的腳本都放在script中。
這是由于整個(gè)處理都在一個(gè)頁(yè)面中,為了能按照順序執(zhí)行相應(yīng)的腳本,remove的腳本需要優(yōu)先執(zhí)行,當(dāng)兩個(gè)組件不停的切換的時(shí)候。
client 對(duì)于腳本的解析流程如下:
首先分批裝載js url
當(dāng)所有的js裝載完成后
執(zhí)行remove 腳本
遍歷content,增加相應(yīng)的html node
執(zhí)行script腳本。
對(duì)于頁(yè)面的生成,基本上沒(méi)有什么問(wèn)題。
只是如果采用這種方式,可能目前來(lái)說(shuō)只能依賴(lài)于ext這個(gè)框架,對(duì)于服務(wù)端的靈活性也就大打折扣,不過(guò)既然是為了ext而做的,那也就無(wú)所謂了。
不知道各位對(duì)這種生成方式有什么不同意見(jiàn),期待討論。
posted on 2008-01-02 18:36
布衣郎 閱讀(3448)
評(píng)論(4) 編輯 收藏 所屬分類(lèi):
web view技術(shù)