我正在尝试编写一个GWT应用程序,该应用程序为每个“页面”(位置)重复使用相同的模板。该应用程序有4个主要的“页面”:
仪表板页面(http://www.mywebapp.com/#dashboard
)
计算器页面(http://www.mywebapp.com/#calc
)
配置器页面(http://www.mywebapp.com/#config
)
登录页面(http://www.mywebapp.com/#login
)
每个“页面”具有相同的模板化外观:(1)包含徽标和导航菜单的标题部分,(2)包含“特定于页面”内容的内容部分(即,对于#dashboard
位置,#login
位置等),以及(3)页脚节,其中包含一些链接。如此看来,页面之间唯一的变化就是内容部分。就像普通的模板化网站一样。
问题是,每个“页面”(位置)实际上都是一个相当复杂的UI,具有许多由许多小部件组成的不同面板。当用户与该应用进行交互时,这些面板将无处不在,并且显示将一直在变化。例如,在#calc
页面上,用户可以选择显示计算器的“模式”:“基本”或“高级”。当用户选择“高级”时,将显示其他几个面板(“基本”面板除外)。
能够将此类操作保留在历史记录中,这样很好,以便用户可以在“基本”或“高级”模式下为应用添加书签,例如:http://www.mywebapp.com/#calc/basic
;要么http://www.mywebapp.com/#calc/advanced
这是问题所在:
我们已经在这里进行活动/场所的几个“级别”。在“应用程序”级别,我们有MyWebAppModule implements EntryPoint
下载时需要向用户显示的模板。此TemplatePlace
是在调用之前向HistoryHandler注册的默认/初始位置。
public class MyWebAppModule implements EntryPoint {
@Override
public void onModuleLoad() {
// ...
// The first place we go to when this module downloads.
TemplatePlace templatePlace = getSomehow();
historyHandler.register(placeController, eventBus, templatePlace);
historyHandler.handleCurrentHistory();
}
}
接下来,我们拥有所有不同的“页面”:
DashboardPlace
,CalculatorPlace
等,它们都有各自独特的视图/显示。例如,当用户单击“计算器”链接转到CalculatorPlace
时,它应呈现与在“基本”或“高级”模式下标识要使用计算器时不同的视图。最后,我们在每个页面/位置都有不同的显示区域,面板等,例如
BasicCalculatorPlace
和AdvancedCalculatorPlace
。这就是我所说的导航的不同“层次”的意思:应用程序级别(适用于所有页面/位置的模板)
页面级或地方级
显示级或面板级
问题:
当用户执行以下所有操作时,我希望获得可添加书签的URL(位置):
转到主页(
http://www.mywebapp.com
)转到任何“页面”(
http://www.mywebapp.com/#calc
等)使用导致特定页面的面板或显示配置(
http://www.mywebapp.com\#calc\#advanced
等)的页面/位置我可以创建多少个活动和地点?多少个ActivityManager?我想我想问的是可书签UI的每个“级别”需要如何精细的活动/位置。提前致谢!
最佳答案
我认为每个“页面”只需要一个ActivityManager和一个Activity。您可以将“页眉”和“页脚”制作为可在每个页面中重复使用的小部件。
您可以使用标记来标记同一页面的不同状态。例如,您可以将令牌设置为“基本”-它会告诉CalculatorActivity显示基本计算器面板。该网址将如下所示:
www.myApp.com/?#Calculator:basic
当用户单击窗口小部件以选择高级选项时,您会
PlaceController.goTo(new CalculatorPlace("advanced"));
CalculatorActivity将获得CalculatorView(已显示),它将看到令牌已设置为“ advanced”,并将指示该视图显示高级面板。
请注意,您可以根据需要对令牌进行详细说明,然后在“活动”中对其进行解析。例如,您可以拥有类似
www.myApp.com/?#Calculator:option=basic&position=top&theme=pink