问题标签 [gwt-places]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
344 浏览

java - GWT MVP:连接演示者、活动、展示和地点的点

我正在尝试设计我的第一个超级简单的 GWT 应用程序,该应用程序利用了 GWT 的大多数主要 API 功能。我想我已经完成了大约 70 - 80% 的路,但是在翻阅了 GWT 文档、无数文章并在 SO 上发布了许多其他与 GWT 相关的问题之后,我仍然很难理解最后 20 - 30% 需要完全放置这个应用程序。

我已经调用了这个第一个测试应用程序ClickItToWinIt,我希望它看起来像这样:

在此处输入图像描述

当用户单击“Win”按钮时,win-pic.png左侧的图像框中会弹出一张图片(“”)。当用户点击“Lose”按钮时,lose-pic.png同框会弹出一张图片(“”)。用户可以在按钮之间来回点击,以显示不同的图片。这将是一个单页应用程序,在我的机器上本地托管,并且只需要包含 1 个主页、1 个模块/入口点等。

请注意,对于这样一个简单的应用程序,下面提出的打包/类结构肯定是矫枉过正的ClickItToWinIt。然而,不久之后,我想用 GWT 继续做更大更好的事情,所以在我开始使用更复杂的 UI 处理更大的应用程序之前,了解正确的 GWT 编码对我来说很重要。

此外,以下提议的结构基于 Google 似乎孜孜不倦地鼓励的 3 个 GWT 原则:

  • 表现; 客户端速度
  • 安全
  • 关注点分离(MVP 等)以便于测试

最后一项:通常,在我的 PHP webdev 日子里,我在一些站点中使用“主题/皮肤”的概念,方法是使用不同的 CSS 文件部署站点,该文件只是将不同的样式规则应用于相同的 DOM 元素。因此,我可能有一个“ normal-styles.css”文件使网站看起来“正常”,但也有一个“ facebook-styles.css”文件为网站提供 Facebook 的外观(颜色、字体等)等。我会喜欢在这里完成同样的事情,并提出一个net.bfodder.c2w.client.views.themes包含子类的包AbstractTheme。这些子类将在构建时以某种方式注入/烘焙到视图/演示器中,并为我提供一种使用不同主题或皮肤部署应用程序的方法。ClientBundleCssResource是正确的)GWT似乎在 GWT POJO 中具有对象化 CSS 样式。我的子类会以某种方式与我的所有sAbstractTheme绑定CssResource并定义样式。Widget

所以这是建议的src/main/java结构ClickItToWinIt(我正在使用 Google-Eclipse 插件在 Eclipse 3.7 Indigo 中开发):

AppController适用于不属于任何特定IPresenter子类的任何奇怪的应用程序级业务逻辑。这MainModule是一切开始的地方(DI,开始初步Activity等)。按钮放在里面ButtonContainer,按钮放在ImageViewer里面,ImageContainer两个内部容器都放在里面MainContainer(我假设是在里面创建的MainModule)。至于这些 UI 组件的布局和样式,就像我说的,这取决于注入/配置AbstractTheme在其规则集中定义的任何内容。

我使用这里ClientFactory推荐的方便访问应用程序的 GWT 管道的主要部分。

至于 MVP “东西”,这就是我的想法:

问题!

就像我在上面所说的,我相信我快到了,我只是很难弥合某些事情上的差距。所以我问:

  1. 如何连接我的AbstractTheme子类以使用CssResourceClientBundle以便我的应用程序被注入/配置正确的主题,并且客户端浏览器下载正确的 CSS 文件(normal-style.cssfacebook-style.css)?
  2. 有人可以正确解释IPresenter(来自经典 MVP)AbstractActivity、“显示区域”(AcceptsOneWidget)和Places 之间的关系吗?这里是否存在 1 对 1 对 1 对 1 的关系,或者 GWT 的意图是让每个AbstractActivity或其他一组比率具有多个显示区域?
  3. 如何连接WinPlaceGWT 的 History API?因此,如果用户单击WinButtonLoseButtonWinButton,如何将其保存在浏览器历史记录中,以便他们可以点击前进/后退浏览器按钮并一遍又一遍地重新创建这种使用模式?
  4. WinButton被点击时,它会在事件总线上放置一个点击事件。我在哪里以及如何将处理程序/侦听器连接到 EventBus,它将知道:(a) 更改 中的图像ImageViewer,以及 (b) 将此状态更改存储在 History API 中?
  5. AppController这篇文章中得到了这个想法,不幸的是,它从未提供任何代码片段来说明它的AppController实际外观。任何人(熟悉AppControllerGWT 模式的人)都可以对它的外观有所了解吗?也许它是一个IPresenter没有特定Activity或视图组件的子类?
  6. 总的来说,我知道这类“ amidoinitrite? ”式的问题在 SO 上是不鼓励的,但我必须问任何在战斗中穿的 GWT 退伍军人:我在这里是不是离基地太远了,或者我或多或少遵循 GWT 最佳实践?有什么建议么?

我不想在这里问这样一个“超级问题”,但我宁愿这样做,也不愿用 6 个中等问题把 SO 弄得一团糟,然后一遍又一遍地重复同样的问题设置。另外,通过一个好的代码示例,可能可以一口气回答所有 6 个问题,所以我在这里抓住了机会。

提前致谢。

0 投票
1 回答
457 浏览

java - GWT:地点和活动映射器的粒度

我终于开始“获得” GWT。在任何时候,PlaceChangeEvent都可以EventBus像这样在应用程序上触发 a:

这会将事件添加到总线,从而注册者ActivityManager将其收集起来并咨询其内部ActivityMapper以将其ActivityPlaceChangeEvent's关联Place

然后Activity(类似于 MVP/MVC 中的演示者或控制器对象)获取所需的任何数据(通过对服务器的 RPC 调用)并执行任何业务逻辑并配置最终视图(通常是Composite某种类型的)以显示。

只要我们谈论的是一个超级简单的 GWT 应用程序,它的主机页面上只有一个显示区域,那么就像我说的,我“明白”了它。

我现在窒息的地方是当您的应用程序包含多个显示区域(可以彼此异步更新的区域)时会发生什么。

所以我问:

  1. ActivityMappers 应该有多细?是否只有一个应用程序范围内将所有sAppActivityMapper映射到所有ies,或者是否应该有某种层次结构/分解,您有多个映射器?(如果您对此的回答类似于“这取决于您的应用程序的需求”,那么请解释什么要求/需求推动了适当的粒度级别!)PlaceActivityActivityMapper
  2. 如果 aPlace表示您的应用程序中的 URL 令牌(为了使成为Place可收藏状态),那么当您有一个具有多个显示区域(D1、D2、D3)的更复杂的应用程序时会发生什么。一个 URL 令牌(即http://myapp.com/#token-for-some-new-place)如何映射到 D1、D2 和 D3?这不意味着ActivityMapper#getActivity必须能够返回一个活动列表(List<Activity>),其start(AcceptsOneWidget, EventBus)方法都会被调用吗?

感谢您在这里的任何帮助 - 代码示例总是很摇滚。

0 投票
1 回答
290 浏览

java - 如何使用特定的 Widget 注入 GWT Activity#start?

我有以下父容器:

因此,当用户单击 中的其中一个 TextButtons 时buttonPanelcontentPanel的内容会发生变化。我正在尝试使用“活动/地点”框架让每个 TextButton 点击​​被记住在历史中。因此,如果用户分别点击“红色”、“绿色”和“蓝色”按钮,contentPanel则会改变 3 次,然后他们可以点击 Back/Forward 浏览器历史记录按钮并在历史记录中不断来回移动(并且“重播”按钮一遍又一遍地点击,等等)。

我还有以下课程:

我正计划将事情连接起来,以便:

  • PlaceController.goTo(new RedButtonPlace())最终路由到RedButtonActivity
  • PlaceController.goTo(new GreenButtonPlace())最终路由到GreenButtonActivity
  • 等等(每个按钮的颜色都有一个位置和活动)

我坚持的是:如果我PlaceController.goTo(new RedButtonPlace())从点击处理程序内部调用RedButton,我如何以及在哪里指示RedButtonActivity更新contentPanel例如:

最后一行是这里的关键:panel.setWidget(view). 我们如何确保这panelParentContainer#contentPanel? 提前致谢!

编辑:根据一个答案建议,这是一个代码更新:

如果这是正确的方法,那么我假设在start(AcceptsOneWidget panel, EventBus eventBus)调用该方法时,redButtonActivityManager知道为panel参数注入正确的显示吗?

0 投票
1 回答
1251 浏览

java - 如何使用自定义令牌实现 GWT PlaceHistoryMapper?

我希望我的小型 GWT 应用程序具有以下所有“书签” Place

所以我继续创建了 5Place个子类,所有这些子类都采用以下形式:

并有相应的分词器:

我正在尝试PlaceHistoryMapper为我的应用程序实现一个:

子类和 in中的伴侣getPlace/getToken方法似乎在做同样的事情。他们是吗?如果是这样,我是否只在它们内部使用相同的代码?如果它们不相同,它们有何不同,我应该如何实施它们?PlaceTokenizer<T>MyWebAppPlaceHistoryMapper

请记住我希望在应用程序中作为可收藏位置的 URL 令牌 - 我不想使用 GWT 的默认someDisplay:SomePlace令牌。提前致谢!

0 投票
1 回答
429 浏览

java - GWT PlaceHistoryMapper 令牌如何转换为实际 URL?

如果我实现自己的PlaceHistoryMapper

如果我的网络应用程序植根于http://www.myapp.com,那么与HomePlace和相关联的实际(可书签)URL 是AboutUsPlace什么?他们是:

  • http://www.myapp.com/homehttp://www.myapp.com/about-us; 或者
  • http://www.myapp.com/HomePlace:homehttp://www.myapp.com/AboutUsPlace:about-us; 或者
  • 别的东西?

提前致谢!

0 投票
1 回答
300 浏览

java - GWT 地点与活动屏幕的比率?

我正在尝试编写一个 GWT 应用程序,它为每个“页面”(位置)重用相同的模板。该应用程序有 4 个主要“页面”:

  • 仪表板页面 ( http://www.mywebapp.com/#dashboard)
  • 计算器页面 ( http://www.mywebapp.com/#calc)
  • 配置器页面 ( http://www.mywebapp.com/#config)
  • 登录页面 ( http://www.mywebapp.com/#login)

每个“页面”都具有相同的模板外观:(1) 包含徽标和导航菜单的标题部分,(2) 包含“页面”特定内容的内容部分(即,对于#dashboardplace、#loginplace 等),以及 (3) 包含一些链接的页脚部分。所以你看,从页面到页面的唯一变化是内容部分。就像一个普通的模板网站。

问题是,每个“页面”(位置)实际上是一个相当复杂的 UI,其中包含许多不同的面板,其中包含许多小部件。当用户与应用程序交互时,这些面板会出现和消失,并且显示会一直在变化。例如,在#calc页面上,用户可以选择显示计算器的“模式”:作为BasicAdvanced。当用户选择Advanced时,将显示几个附加面板(除了Basic面板)。

能够将此类操作保留在历史记录中会很好,以便用户可以在基本高级模式下为应用添加书签,例如:

  • http://www.mywebapp.com/#calc/basic; 或者
  • http://www.mywebapp.com/#calc/advanced

这是问题所在:

我们已经在这里进行了几个“级别”的活动/地点。在“app”级别,我们有下载时需要向用户显示的模板MyWebAppModule implements EntryPoint。这TemplatePlace是在调用之前向 HistoryHandler 注册的默认/初始位置:

接下来,我们有所有不同的“页面”:DashboardPlace、、CalculatorPlace等等,它们都有自己独特的视图/显示。例如,当用户单击Calculator链接转到 时CalculatorPlace,它应该呈现与他们想要在 Basic 或 Advanced 模式下使用计算器时不同的视图。

最后,我们在每个页面/位置内都有不同的显示区域、面板等,例如BasicCalculatorPlaceAdvancedCalculatorPlace。这就是我所说的不同“级别”导航的意思:

  1. 应用程序级(适用于所有页面/位置的模板)
  2. 页面或地方级别
  3. 显示或面板级

问题:

当用户执行以下所有操作时,我想实现可收藏的 URL(位置):

  • 转到主页 ( http://www.mywebapp.com)
  • 转到任何“页面”(http://www.mywebapp.com/#calc等)
  • 使用导致页面特定面板或显示配置(http://www.mywebapp.com\#calc\#advanced等)的页面/位置

我要创建多少活动和地点?有多少个 ActivityManager?我想我问的是每个“级别”的可书签 UI 的活动/地点需要多细。提前致谢!

0 投票
2 回答
1100 浏览

java - 多个 GWT ActivityManager 和 ActivityMappers 有什么用?

终于想到你应该编写一个代码ActivityMapper来解析/检查PlacegetActivity(Place)方法被传递的子类,并返回适当Activity的呈现给用户。

所以这让我开始思考:在你的应用程序中需要许多不同的子类是有道理Place的,每个子类代表一个不同的可书签 URL/状态。

但是为什么一个应用程序需要超过 1ActivityManagerActivity Mapper?似乎没有 GWT 对哪个Place映射到哪个Activity...

我听说过一些策略,每个显示区域都有自己的ActivityManager. 看起来我也喜欢这样只会让你的项目更复杂而没有提供任何真正的好处。提前致谢!

0 投票
1 回答
941 浏览

java - 添加到 GWT RootPanel 还是仅设置默认视图?

我有以下 GWT 类:

  1. 如果我只是要在模块加载时调用并显示,为什么我需要添加MyDefaultView到?RootPanelPlaceHistoryHandler#handleCurrentHistory()MyDefaultView
  2. 如果我不应该MyDefaultView直接添加到RootPanel,那么我应该添加什么?

提前致谢!

0 投票
2 回答
883 浏览

java - GWT 活动/地点应该是单例还是原型?

这之间有什么区别(性能和其他):

和:

换句话说,我是否Place一遍又一遍地重复使用相同的“单例”,或者我每次请求时都实例化一个新的,有什么区别。

此外,对于Activitys 内部的相同问题ActivityMapper。再次感谢!

0 投票
2 回答
669 浏览

gwt - 在 GWT 中查找令牌

有趣的是,其中一位应用程序开发人员正在休假,我无法联系到他。

我们有一个 GWT 应用程序,我们正在尝试通过将令牌传递给一个地方来临时加载一个页面。但由于他忘记记录到达该地点的 URL,我们无法加载该地点。

所以我不知道如何找出令牌。但我知道那个地方。

有人可以指导我吗?