如果我理解正确:
(因为我也是一个javascript人,这看起来很像Backbone的路由器和其他现代JSFrameworks)
但要重建State,我们需要将一些数据提取到服务器。 P& A api中有什么可以做到的吗?使用RPC,这个角色显然由扩展RemoteServlet的GreetingServiceImpl完成。使用Backbone,我们有Sync对象。
但是当我查看A& P教程时,我从未见过这样的代码。服务器在哪里?我们需要RPC吗?它与RequestFactory混合在一起吗?
答案 0 :(得分:4)
首先,关于术语的一个小注释:
地点代表您在应用中的位置。当您查看该屏幕时,它通常由不同的“块”组成,每个“块”专用于特定的活动,例如:标题(比如搜索框和注销链接),导航菜单,主 - 详细信息视图中的“主”,主 - 详细信息视图中的“详细信息”。所有这些都可以是活动(尽管不一定,从未交换到其他任何东西的东西都不会获得任何活动)。
因为活动按照定义显示在屏幕上,您可以与它们互动,可能会触发移动到另一个地方(PlaceController#goTo
)。
该地点可选地同步与URL(双向)和生成浏览器历史记录项;默认情况下使用哈希,但您可以交换实现to use HTML5。
(地方类似于Backbone的路由器,除了它们经过类型检查,活动是顶层的轻薄层,在Backbone AFAICT中没有等效物)
现在回答你的问题:
GWT是一个工具包,而不是框架。这意味着大多数构建块不会强迫您使用任何其他构建块(地点可以在没有活动的情况下工作,编辑器可以在没有小部件的情况下工作等)。
活动以异步方式启动,这是您通常从任何地方获取数据的地方。根据工具包的精神,您可以随意使用任何符合您需求的东西:GWT-RPC,RequestFactory,RequestBuilder,Errai JAX-RS,Errai Bus,XMLHttpRequest,WebSockets,AppEngine频道等。有些人还会向他们发布活动。事件总线将活动与他们获取数据的方式分开。
答案 1 :(得分:0)
MVP描述了客户端架构。
<强> M_odel 强>: 您的应用处理业务对象。
<强> V_iew 强>: UI元素,显示模型的表示。
<强> P_resenter 强>: 一个处理所有用户交互和修改模型的类。
假设您有一个显示和存储Notes的应用程序。
你有一些地方:
MVP
中,可以将其描述为一组正在运行的Presenter
。在我们简单的应用程序中有两个地方。每个Place
只有一个Presenter
NotesListPlace
- &gt;显示所有存储的笔记
NotesEditPlace
- &gt;创建/编辑注释
NotesEditPlace:
有一个视图和一个演示者。 View有一个TextArea(用于注释)和一个保存按钮。 演示者有一个用于保存按钮的clickHandler(可能有更多,但作为示例它应该足够了)
用户从NoteList中选择一个音符
来自PlaceChange
的 NoteListPlace
- &gt; NoteEditPlace
Presenter
启动并在视图中注册click-handler。如果按下该按钮,则演示者从textarea读取输入并更新模型(新的Notes-onject)
现在是服务器互动。您可以使用所需的每个(GWT)传输层。
成功回调会将PlaceChange
事件触发到NoteListPlace
。
全部重新开始。演示者启动,一个新的服务器交互来加载MOdel(一个Notes列表)。视图由演示者更新......
更新1 不需要服务器。演示者可以将模型持久保存到浏览器的localStorage。
更新2 您可以使用所需的每种传输机制。 RequestFactory,GWT-RPC。我使用RequestBuilder和GWT AutoBeans。