过去几周我一直在尝试GWTP并用它来构建一个小项目. 这是问题: 我有一个网格小部件(附带的屏幕截图),显示了一个数据列表.选择行的复选框并单击“编辑请求”后,我将进入详细信息页
这是问题:
我有一个网格小部件(附带的屏幕截图),显示了一个数据列表.选择行的复选框并单击“编辑请求”后,我将进入详细信息页面.
由于我将所有数据(模型)显示在摘要屏幕演示器本身的详细信息页面中,因此我不想再次从数据库中获取它.
所以,我做了以下事情:
>在选择和单击编辑请求时,我获得所选模型
>向详细信息页面发出位置请求
>触发编辑事件并将所选模型作为参数传递.
我知道我做错了,因为当我选择一个项目并点击编辑请求时,详细信息页面还没有收到所选项目.它只显示一个没有填充数据的空白页面(显然,因为在事件被触发之前已经到达了很多位置).
当前代码:
RequestModel selectedItem = getView().getGrid().getSelectionModel().getSelectedItem(); PlaceRequest placeRequest=new PlaceRequest(NameTokens.initiationedit); getEventBus().fireEvent(new RequestEditEvent(selectedItem, PHASE_INITIATION)); placeManager.revealPlace(placeRequest);
个人思考的解决方案:我可以使用所选项目的id参数进行placerequest,然后覆盖useManualReveal和prepareFromRequest以从数据库中获取新数据,而不是触发事件.
但有没有办法可以避免数据库调用预先存在的数据.
>如果要保留当前的“RequestEditEvent”解决方案,请确保使用@ProxyEvent(请参阅 http://code.google.com/p/gwt-platform/wiki/GettingStarted?tm=6#Attaching_events_to_proxies). >另一种可能是颠倒事件的方向:在您的详细信息演示者中,触发一个事件,该事件从概述演示者请求数据. >但是,当在多个演示者中使用相同的数据时,将数据保存在中央模型中可能是个好主意:创建模型类(@Singleton)并将其注入所需的任何位置.然后,您可以从该本地模型进行查找(通过id),而不是询问服务器.在这种情况下,您不需要任何事件 – 只是某处的ID,例如作为场所参数,甚至作为模型中的“currentItemId”.