我已經開始了一個GWT項目,我決定試試UiBinder。我很難在UiBinder之上鋪設MVP模式。GWT MVP UiBinder - 將參數傳遞給主持人
當我使用GWT-pure-java時:我會使用杜松子酒爲我的演示者注入相應的視圖。這非常簡單,如果我想將ID傳遞給主持人,那麼我只需將ID傳遞給主持人的構造函數即可。
與UiBinder並不那麼直接。我幾乎可以肯定,我錯過了一些東西,因爲很多人都聲稱UiBinder和MVP是天作之合......所以我希望在這個查詢中得到一些堅實的迴應;-)
我在一些微不足道的GWT-UiBinder的例子看到的,是該視圖是由粘結劑創建,那麼:
- 視圖構建主持人無論是在它的構造函數或通過
@UIFactory
方法。 - 將相應的演示者傳遞給視圖(通過setter,在構建視圖之後不用說)。
第一種方法是,如果主持人在視圖中構建,如何將ID傳遞給主持人?你會做view.getPresenter().setId(42);
,然後主持人會去服務器獲取一些信息,並要求視圖顯示...味道不好。
在第二種方法中,最終會出現一個非直觀的對象圖,其中不清楚誰是消費者,誰是生產者。此外,在情況下認爲需要從主持人(幾乎所有的用例需要這個)你會做一個信息:提前
//some code would create the presenter pass it the id and then call view.setPresenter
class MyView {
void setPresenter(MyPresenter p) {
this.presenter = p;
//OK now that i have my presenter how do I ask it to fetch data from the server.
//do i turn around and do: presenter.setView(this); and then the presenter takes
//over and uses the view to display the data?
}
}
這同樣是臭...很抱歉的長期職位,並感謝...
另請參閱http://www.google.com/events/io/2010/sessions/gwt-continuous-build-testing.html,其中討論了他們如何在Google Wave(現爲Apache Wave)中使用MVP:演示者從不對於視圖而言,取而代之的是,視圖總是以適當的值回調給演示者;並且演示者完全控制演示狀態。儘管編輯器框架和/或單元小部件效果不佳,但它是一種有趣的方法。 –
謝謝你的深思熟慮......我研究了文章和附件。我還沒有看到波浪會議(我會在稍後觀看)。我從來沒有真正使用過display.getClickHandler方法(即使我做了gwt-pure-java)。我總是有setter(display.setClickHandler)。我需要進一步思考。我可能沒有想到UiBinder及其在視圖創建和視圖放置中的作用...... – hba