IAm*_*aja 4 java mvp gwt android-activity gwt-history
假设我想创建一个包含两个简单"屏幕"的GWT应用程序:
所以这个伪代码可能看起来像:
public class MainMenuPresenter implements Presenter {
// mainMenuScreen may be a Composite that contains a Button for
// switching/navigating to the EditPreferencesView
private MainMenuView mainMenuScreen;
}
public class EditPreferencesPresenter implements Presenter {
// editPrefsScreen may be a Composite that contains a Button for
// switching/navigating back to the MainMenuView
private EditPreferencesView editPrefsScreen;
}
Run Code Online (Sandbox Code Playgroud)
问题:
Place和它的关联如何Activities适应这种范式?如果它是MVP和地方/活动之间的选择,那么这个例子将如何使用"活动/地方"范例?MainMenuView在历史中设置为一个"位置",EditPreferencesView作为第二个"位置",然后允许用户点击后退/前进浏览器按钮并在它们之间切换?我也对如何与一个人Place联系ActivityManager,以及如何/谁开火/处理感兴趣PlaceChangeEvents,但我会保留以后的; 在我继续讨论这些概念之前,我需要先了解这些概念.提前致谢!
我将尝试概述一个可以在您的情况下工作的示例设置.有很多变化,但我想专注于一个简单的(并鼓励你想出可以调整的地方).
选择一些URL标记,例如"#mainmenu"和"#editprefs",它们将附加到主机页面的URL.它们将用于浏览器历史记录,因此后退和前进按钮可用等.
DefaultHistorian将自动为您完成URL处理.PlaceController将触发PlaceChangeEvent.
Place对象只是令牌的面向对象抽象 - 这很有用,因为更高级的令牌也可以获取需要解析的参数.您需要一种方法将标记映射到Place对象.这是PlaceHistoryMapper的责任.
在我的示例中,我们只需手动实现PlaceHistoryMapper,将"#mainmenu"映射到MainMenuPlace,将"#editprefs"映射到EditPreferencesPlace.
[或者,也可以使用@WithTokenizers注释并为每种类型的场所实现(空)PlaceTokenizer.然后,您可以使用@Prefix批注将"mainmenu"和"editprefs"指定为标记.
Place对象本身不做任何事情 - 如上所述,它基本上只是一个抽象令牌.实际代码将在Activity中运行.因此,您必须将地方映射到活动.这是ActivityMapper的责任.
在我的示例中,您将实现它以将MainMenuPlace映射到MainMenuActivity并将EditPreferencePlace映射到EditPreferenceActivity.
为简单起见,在我的示例中,Activities还将实现Presenter.因此MainMenuActivity将实现MainMenuPresenter.这根本不是必需的,但也许是一个很好的起点.这就是Places + Activities可以与MVP连接的地方.这两个概念并不需要彼此,但它们可以很好地协同工作:
如果您让一个Activity(或其中一个代理人)实现了一个Presenter,那么您已经连接了两个.
"#mainMenu"
---(PlaceHistoryMapper)---> MainMenuPlace
---(ActivityMapper)---> MainMenuActivity implements MainMenuPresenter
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2103 次 |
| 最近记录: |