GWTP之入門簡介(一)

一、Beginner’s Tutorial – Part1(GWTP)
此教程是為那些沒有GWTP基礎(chǔ)秃诵,但是想快速編寫出一個GWTP框架的開發(fā)者而講述的。第一部分展示一個基本的Presenter是怎么通過UiHander和UiBinder與View進(jìn)行交互的个榕。也許你需要一遍又一遍的重復(fù)查看你所創(chuàng)建的每一個Presenter忠烛。這個教程并不會過多的講解GWTP是如何運(yùn)作的一些細(xì)節(jié),但會講他們之間是如何交互的寂汇。

  1. Covered features:
    Presenter, View, PresenterModule, UiHandler, NameToken and CodeSplit.
  2. Application Structure
Application Structure

2.1 OverView of the main files

a. HomeModule:這是一個GIN module,用來將HomePresenter綁定到一起病往。

b. HomePresenter:繼承于ApplicationPresenter,它通過使用父類Presenter’Slot機(jī)制來顯示它自己。(This is a child
Presenter of ApplicationPresenter. It uses its parent Presenter’s Slot to reveal itself).

c. HomeView:與HomeView.ui,xml綁定

d. HomeView.ui.xml:為HomePresenter聲明存放HTML頁面和控件.

e. ApplicationModule:這是一個GIN module骄瓣,用來把ApplicationPresenter綁定一起停巷,同時可以installing其他的子module(如:HomeModule for instance).

f. ApplicationPesenter:是包含了所有ApplicationPresenter的邏輯.

g. ApplicationUiHandlers:慣用于表示一些事件回應(yīng)的ApplicationView到ApplicationPresenter的動作.

h. ClientModule:所有GIN module的主GIN module.

i NameTokens:包含一些String類型的常量來表示你的Places.

  1. Views and Presenters
    在GWTP中,View和Presenter引用的是GWT的MVP模式榕栏,Presenter是所有客戶端業(yè)務(wù)邏輯代碼的集合(驗(yàn)證畔勤、數(shù)據(jù)存儲、查詢等). View僅僅只顯式由Presenter指定的View扒磁,而不包含任何的業(yè)務(wù)邏輯處理代碼庆揪。
    3.1 View
    下面截圖是項目中默認(rèn)的View:
View

上述截圖代碼看起來不多,但是有幾個關(guān)鍵點(diǎn)我們需要解釋:
a. HomeView 繼承ViewImpl妨托,它會提供一個initWidget()方法缸榛,此方法將會初始化你指定的Dom元素。
b. HomeView同時還要實(shí)現(xiàn)Presenter內(nèi)部接口MyView兰伤。通過此接口内颗,Presenter可以與View建立聯(lián)系。(這一點(diǎn)是非常非常重要的)
c. 在此教程中敦腔,我們使用UiBinder框架來構(gòu)建我們的Ui界面均澳,圖中的interface Binder extends UiBinder<Widget,HomeView>就是說明GWTP使用UiBinder來顯示View的。
d. GWTP是依賴GWT中的一個輕量級的Dependency injection框架符衔,當(dāng)在構(gòu)造方法中加上注解@Inject负懦,表明會自動實(shí)例化其構(gòu)造方法中的參數(shù)。不然在上圖的uiBinder參數(shù)之前柏腻,我們需要通過Gwt.create()將Binder接口進(jìn)行實(shí)例化聲明纸厉。
3.2 Presenter
在此項目中,我們使用名字叫nested Presenter(嵌入式Presenter)五嫂。這就意味著通過使用Slot Mechanism其他Presenter可以嵌入到父的Presenter颗品。在此項目中肯尺,ApplicationPresenter是root Presenter,HomePresenter是被嵌入到里面的躯枢。下面為HomePresenter的截圖

HomePresenter

跟上面的View一樣则吟,只講解一些關(guān)鍵性的點(diǎn):

a. Extends Presenter<HomePresenter.MyView,HomePresenter.MyProxy>繼承了ApplicationPresenter的父類。這就意味著锄蹂,MyView和MyProxy這兩個接口需要在此類中進(jìn)行定義氓仲。Myview早期在View就已經(jīng)有實(shí)現(xiàn)了,而MyProxy是負(fù)責(zé)監(jiān)聽所有的事件得糜,因此需要Presenter和View都已創(chuàng)建敬扛。

b. ?@ProxyStandard注解是用來指定你的Presenter是否使用GWT的Code Splitting特性。在這個例子中沒有使用朝抖,如果使用的話啥箭,將其注解改成@ProxyCodeSplit。

c. @NameToken是將一個頁面引入到你的Application中治宣。每個你想導(dǎo)航的頁面都需要一個nameToken來關(guān)聯(lián)它急侥。圖上的Page叫HOME是因?yàn)樗怯脩艨吹降氖醉摗.?dāng)你點(diǎn)擊返回或其他按鈕時侮邀,他都會返回對應(yīng)的Page坏怪。我們通常將引用到Presenter中的NameToken稱為Place“砑耄可以參考GWT的History陕悬。

d. ?ApplicationPresenter.SLOT_MAIN表示,告知Presenter通過使用Slot Mechanism將他自己轉(zhuǎn)換為ApplicationPresenter’slot.

  1. UiBinder
    看之前定義的View:
View

這個接口用來綁定View到他相關(guān)聯(lián)的UiBinder XML file按傅。

UiBinder.ui.xml

上述xml文件只會簡單的顯示一個“HelloWorld!”
另外一種好的方式去定義HTML元素是使用ui:field=”someField”屬性捉超。他會允許你從View中存取HTML元素或Widgets。

UiHander.ui.xml

上圖中唯绍,創(chuàng)建了一個TextBox并且定義一個ui:field屬性為nameField拼岳。為可以從View中訪問TextBox的值和屬性,我們需要在View中定義一個與ui:field相同的屬性况芒,并且加上@UiField注解來與HTML元素進(jìn)行綁定惜纸。


然后,通過getter方法绝骚,可以拿到nameField屬性的值耐版。然后,通過getter方法压汪,可以拿到nameField屬性的值粪牲。

  1. UiHander(重點(diǎn)也是難點(diǎn))
    UiHandlers是一個GWTP的特性,代表一些View到Presenter的行為止剖。比如一個Click事件腺阳,UiHandler將會監(jiān)聽指定的事件落君,并且告知GWTP當(dāng)事件觸發(fā)時哪個方法將被調(diào)用。
    5.1 Creating the UiHandler
    使用UiHandlers之前需要五步亭引。
    a) 創(chuàng)建一個UiHandler接口
UiHandler

b) 在Presenter中實(shí)現(xiàn)UiHandler接口

c) HomePresenter.MyView繼承HasUiHandlers<HomePresenter>


d) 在View中绎速,將ViewWithUiHandlers<HomePresenter>代替繼承的ViewImpl


e) 為View來設(shè)置UiHandler:


一旦上述的完成,我們將創(chuàng)建一個Button焙蚓,當(dāng)被點(diǎn)擊的時候纹冤,將TextBox的內(nèi)容發(fā)送到Presenter。

因此我們需要聲明一個方法购公,當(dāng)事件被觸發(fā)后萌京,UiHandler需要調(diào)用的那個方法


5.2 Handling the event
現(xiàn)在我們的HomeUiHandlers已經(jīng)創(chuàng)建,并且設(shè)置了君丁,因此我們可以將其綁定到一個事件當(dāng)中〗埽可以通過在一個方法上使用@UiHandlers(“sendButton”)注解來監(jiān)聽一個指定事件绘闷。


現(xiàn)在,View的整個聲明如下:


最后较坛,Presenter需要實(shí)現(xiàn)在HomeUiHandlers接口中聲明的方法
6.Presenter Module
Modules使用GIN Bindings 來連接Presenter是到View,每個Presenter都需要被綁定印蔗,通過module我們可以綁定多個Presenter,我們通常一個Mudle對應(yīng)一個Java包丑勤。

在這里的Mudle只是一個舉例华嘹,在項目中,我們需要定義一個ClienMudle法竞,將其ApplicationMudle給install進(jìn)來耙厚,然后在ApplicationMudle中,又將HomeM

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岔霸,一起剝皮案震驚了整個濱河市薛躬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呆细,老刑警劉巖型宝,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異絮爷,居然都是意外死亡趴酣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門坑夯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岖寞,“玉大人,你說我怎么就攤上這事柜蜈∩麒担” “怎么了床嫌?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胸私。 經(jīng)常有香客問我厌处,道長,這世上最難降的妖魔是什么岁疼? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任阔涉,我火速辦了婚禮,結(jié)果婚禮上捷绒,老公的妹妹穿的比我還像新娘瑰排。我一直安慰自己,他們只是感情好暖侨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布椭住。 她就那樣靜靜地躺著,像睡著了一般字逗。 火紅的嫁衣襯著肌膚如雪京郑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天葫掉,我揣著相機(jī)與錄音些举,去河邊找鬼。 笑死俭厚,一個胖子當(dāng)著我的面吹牛户魏,可吹牛的內(nèi)容都是我干的名秀。 我是一名探鬼主播葛躏,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼陆赋!你這毒婦竟也來了扛门?” 一聲冷哼從身側(cè)響起幢码,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尖飞,沒想到半個月后症副,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡政基,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年贞铣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沮明。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡辕坝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荐健,到底是詐尸還是另有隱情酱畅,我是刑警寧澤琳袄,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站纺酸,受9級特大地震影響窖逗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜餐蔬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一碎紊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧樊诺,春花似錦仗考、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至顿膨,卻和暖如春锅锨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背虽惭。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工橡类, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛇尚,地道東北人芽唇。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像取劫,于是被迫代替她去往敵國和親匆笤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容