Mar*_*ila 6 mvp gwt gwt-mvp gwt-activities gwt-places
在地方变更上更新活动状态的最佳做法是什么?想象一下,您有一个带有视图的活动,该活动显示类别列表和类别中的项目列表.如果选择了不同的类别,则应用程序将转到具有类别ID的新位置.我想要只刷新项目,而不是创建也重新读取类别列表的新活动.
我目前的做法是这样的:
public class AppActivityMapper implements ActivityMapper {
private ItemListActivity itemListActivity;
...
public Activity getActivity(final Place place) {
final Activity activity;
if (place instanceof ItemListPlace) {
if (itemListActivity == null) {
itemListActivity = new ItemListActivity((ItemListPlace) place, clientFactory);
} else {
itemListActivity.refresh((ItemListPlace) place);
}
activity = itemListActivity;
} else {
itemListActivity = null;
}
...
return activity;
}
...
Run Code Online (Sandbox Code Playgroud)
替代方案是:
听PlaceChangeEvent从活动中S(然后你可以用FilteredActivityMapper和CachingActivityMapper用于高速缓存活动在你的ActivityMapper,所以,它的减少到只有当问创建一个新的活动).†
有一些组件听取PlaceChangeEventS和翻译他们面向企业的活动,活动然后侦听到这些事件,而不是PlaceChangeEventS,否则上面一样.
将活动与"屏幕"分离,使用一个reset()方法使"屏幕"成为单例,并从活动中调用该方法start(在这种情况下可能将类别ID作为参数传递).然后,作为单身人士的"屏幕"可以确保仅加载类别列表一次.
在您的情况下,您还可以简单地将类别列表放在共享缓存中,这样您就不必重新使用您的活动,可以创建一个新的,类别列表将被检索一次并放入缓存,后续活动实例将只使用缓存中的内容.这与上面的类似,但更简单,缓存可以由应用程序的其他部分使用.
我个人宁愿选择你的方法(有一个小例外,见下文),因为它是最简单/最简单的.将活动与"屏幕"分离也是一种选择; GWT团队开始在费用样本中探索这种方法(将活动责任与主持人责任与使用MVP分离),而不幸地完成它.
除此之外,我认为现在还没有出现任何最佳实践.
†.我不喜欢将我的活动与他们使用过的地方联系起来(我不太喜欢goTo呼叫的耦合,但还没有找到一个干净简单的替代方案),所以我宁愿不去有这个选项; 同样地,我不会refresh像你那样将地点传递给活动构造函数和方法,而是将信息提取出来并将其传递给活动(例如,在你的情况下,只给活动提供类别ID,不是ItemListPlace实例;我会简单地调用setCategory所有情况,甚至不将类别ID传递给构造函数).
| 归档时间: |
|
| 查看次数: |
2859 次 |
| 最近记录: |