问题标签 [gwt-activities]
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.
gwt - 当每个位置的屏幕布局发生变化时,GWT 使用活动和位置
我对 GWT 的活动和地点的理解是,对于屏幕上的给定区域,您有一个ActivityManager
和一个ActivityMapper
. 您可以在屏幕上拥有多个区域,这意味着您可以拥有多个ActivityManagers
和ActivityMappers
(每个区域一个)。因此,每当有人询问他们各自应该在给定的情况下显示什么活动PlaceChange
时。只要你们所有人都有一个共同的布局,他们可以以不同的方式重用以执行不同的活动,这就很有效。我的问题是我们如何处理不同使用完全不同的布局的情况?我的第一个想法是拥有更多,如果不使用特定区域,那么ActivityManagers
ActivityMapper
Place
Places
Places
ActivityManagers
ActivityMappers
Place
ActivityMapper
null
因为当我们更改为 that 时,该区域将简单地返回Place
。如果有更好的方法,我将不胜感激。
java - GWT Codesplitting 集成:MVP 和 Activity/Places
假设您有一个AcceptsOneWidget
包含选项卡式窗格的“显示区域”( )。单击不同的选项卡(即,从“ fantasyo ”到“ profile ”)会导致在窗格中显示全新的内容。这似乎是代码分割的完美用例,因为在用户单击“配置文件”选项卡之前,他们不需要下载显示它所需的代码。(注意:如果任何 GWT 专家不同意并且认为这不是代码拆分的正确用例,那么请向我指出这一点,但这不是这个问题的重点,所以请多多包涵!)
现在,如果我对基本 GWT 体系结构的理解是正确的,那么显示“配置文件”选项卡所必需的代码由Activity
(ies)、Place
(s) 组成,也许还有一些 MVP 内容,例如 a Presenter
、Module
、EntryPoint
等。当然这个会因应用程序和开发人员的不同而有所不同(正如我在 GWT 中了解到的,有很多方法可以实现相同的目标),但无论如何,它都是一堆 MVP/Activity/Place “东西”。为了这个问题,我喜欢这个 SO question的回答者提出的模型。
在阅读了这篇关于 AsynchProvider 模式的文章后,我试图将所有这些最佳实践结合在一起并实现一个架构:
- 我实现了代码拆分,使得窗格中的每个选项卡都是代码拆分(是代码拆分吗?codesplat?)作为它自己的片段,并且只有当/当用户第一次点击它时才会下载
- 显示/渲染/实现每个片段(选项卡/窗格)所需的所有代码都整齐地组织并遵循
AsynchProvider
上述文章中引用的模式;这允许它被划分并且不依赖于其他片段
我开始将所有部分放在一起,但仍然没有看到这两个概念如何在工作代码中联系在一起。
我发现 GWT 是神秘的、强大的和美妙的,但是如果没有可遵循的实际代码示例,则很难学习。当然,这些线框在“ fantasyo ”或“ profile ”窗格中并没有真正显示出任何复杂性,所以请再次忍受并假装它们都是相当复杂的显示区域,具有许多丰富的 UI 组件。提前致谢!
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
。这些子类将在构建时以某种方式注入/烘焙到视图/演示器中,并为我提供一种使用不同主题或皮肤部署应用程序的方法。ClientBundle
CssResource
是正确的)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 “东西”,这就是我的想法:
问题!
就像我在上面所说的,我相信我快到了,我只是很难弥合某些事情上的差距。所以我问:
- 如何连接我的
AbstractTheme
子类以使用CssResource
,ClientBundle
以便我的应用程序被注入/配置正确的主题,并且客户端浏览器下载正确的 CSS 文件(normal-style.css
或facebook-style.css
)? - 有人可以正确解释
IPresenter
(来自经典 MVP)AbstractActivity
、“显示区域”(AcceptsOneWidget
)和Place
s 之间的关系吗?这里是否存在 1 对 1 对 1 对 1 的关系,或者 GWT 的意图是让每个AbstractActivity
或其他一组比率具有多个显示区域? - 如何连接
WinPlace
GWT 的 History API?因此,如果用户单击WinButton
、LoseButton
、WinButton
,如何将其保存在浏览器历史记录中,以便他们可以点击前进/后退浏览器按钮并一遍又一遍地重新创建这种使用模式? - 当
WinButton
被点击时,它会在事件总线上放置一个点击事件。我在哪里以及如何将处理程序/侦听器连接到 EventBus,它将知道:(a) 更改 中的图像ImageViewer
,以及 (b) 将此状态更改存储在 History API 中? - 我
AppController
从这篇文章中得到了这个想法,不幸的是,它从未提供任何代码片段来说明它的AppController
实际外观。任何人(熟悉AppController
GWT 模式的人)都可以对它的外观有所了解吗?也许它是一个IPresenter
没有特定Activity
或视图组件的子类? - 总的来说,我知道这类“ amidoinitrite? ”式的问题在 SO 上是不鼓励的,但我必须问任何在战斗中穿的 GWT 退伍军人:我在这里是不是离基地太远了,或者我或多或少遵循 GWT 最佳实践?有什么建议么?
我不想在这里问这样一个“超级问题”,但我宁愿这样做,也不愿用 6 个中等问题把 SO 弄得一团糟,然后一遍又一遍地重复同样的问题设置。另外,通过一个好的代码示例,可能可以一口气回答所有 6 个问题,所以我在这里抓住了机会。
提前致谢。
java - GWT:地点和活动映射器的粒度
我终于开始“获得” GWT。在任何时候,PlaceChangeEvent
都可以EventBus
像这样在应用程序上触发 a:
这会将事件添加到总线,从而注册者ActivityManager
将其收集起来并咨询其内部ActivityMapper
以将其Activity
与PlaceChangeEvent
's关联Place
。
然后Activity
(类似于 MVP/MVC 中的演示者或控制器对象)获取所需的任何数据(通过对服务器的 RPC 调用)并执行任何业务逻辑并配置最终视图(通常是Composite
某种类型的)以显示。
只要我们谈论的是一个超级简单的 GWT 应用程序,它的主机页面上只有一个显示区域,那么就像我说的,我“明白”了它。
我现在窒息的地方是当您的应用程序包含多个显示区域(可以彼此异步更新的区域)时会发生什么。
所以我问:
ActivityMapper
s 应该有多细?是否只有一个应用程序范围内将所有sAppActivityMapper
映射到所有ies,或者是否应该有某种层次结构/分解,您有多个映射器?(如果您对此的回答类似于“这取决于您的应用程序的需求”,那么请解释什么要求/需求推动了适当的粒度级别!)Place
Activity
ActivityMapper
- 如果 a
Place
表示您的应用程序中的 URL 令牌(为了使成为Place
可收藏状态),那么当您有一个具有多个显示区域(D1、D2、D3)的更复杂的应用程序时会发生什么。一个 URL 令牌(即http://myapp.com/#token-for-some-new-place
)如何映射到 D1、D2 和 D3?这不意味着ActivityMapper#getActivity
必须能够返回一个活动列表(List<Activity>
),其start(AcceptsOneWidget, EventBus)
方法都会被调用吗?
感谢您在这里的任何帮助 - 代码示例总是很摇滚。
java - 如何使用特定的 Widget 注入 GWT Activity#start?
我有以下父容器:
因此,当用户单击 中的其中一个 TextButtons 时buttonPanel
,contentPanel
的内容会发生变化。我正在尝试使用“活动/地点”框架让每个 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)
. 我们如何确保这panel
是ParentContainer#contentPanel
? 提前致谢!
编辑:根据一个答案建议,这是一个代码更新:
如果这是正确的方法,那么我假设在start(AcceptsOneWidget panel, EventBus eventBus)
调用该方法时,redButtonActivityManager
知道为panel
参数注入正确的显示吗?
java - 如何正确配置我的 GWT Activity 和 ActivityMapper?
我有以下课程:
所以我开始对活动框架有一些表面上的理解,但对它仍然很陌生,以至于当我尝试远离Hello、GWT示例时,我几乎立刻就遇到了 API 的障碍。
在我的应用程序的主 GWT 模块中MyWebAppModule
,我正在尝试实例化和配置这 3 个对象。但是因为我仍然不确定如何使用他们的 API,所以我遇到了实现问题:
- 显然,我没有正确实现
DashboardActivityMapper
,DashboardActivity
所以当我尝试在MyWebAppModule#onModuleLoad
. 有人可以帮我正确实施吗?一旦我得到一个工作示例,我确信我将能够连接活动框架中的其余“点”。 - 除非我遗漏了什么,否则
ActivityManager manager
上述内容似乎没有添加到任何其他类中。这个对吗?GWT 会确保它在内存中保持活动状态,以便它始终在监听eventBus
I pass it forPlaceChangeEvent
s 吗?还是我需要将它添加/注册到任何东西?
提前致谢!
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) 包含“页面”特定内容的内容部分(即,对于#dashboard
place、#login
place 等),以及 (3) 包含一些链接的页脚部分。所以你看,从页面到页面的唯一变化是内容部分。就像一个普通的模板网站。
问题是,每个“页面”(位置)实际上是一个相当复杂的 UI,其中包含许多不同的面板,其中包含许多小部件。当用户与应用程序交互时,这些面板会出现和消失,并且显示会一直在变化。例如,在#calc
页面上,用户可以选择显示计算器的“模式”:作为Basic或Advanced。当用户选择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 模式下使用计算器时不同的视图。
最后,我们在每个页面/位置内都有不同的显示区域、面板等,例如BasicCalculatorPlace
和AdvancedCalculatorPlace
。这就是我所说的不同“级别”导航的意思:
- 应用程序级(适用于所有页面/位置的模板)
- 页面或地方级别
- 显示或面板级
问题:
当用户执行以下所有操作时,我想实现可收藏的 URL(位置):
- 转到主页 (
http://www.mywebapp.com
) - 转到任何“页面”(
http://www.mywebapp.com/#calc
等) - 使用导致页面特定面板或显示配置(
http://www.mywebapp.com\#calc\#advanced
等)的页面/位置
我要创建多少活动和地点?有多少个 ActivityManager?我想我问的是每个“级别”的可书签 UI 的活动/地点需要多细。提前致谢!
java - 多个 GWT ActivityManager 和 ActivityMappers 有什么用?
我终于想到你应该编写一个代码ActivityMapper
来解析/检查Place
其getActivity(Place)
方法被传递的子类,并返回适当Activity
的呈现给用户。
所以这让我开始思考:在你的应用程序中需要许多不同的子类是有道理Place
的,每个子类代表一个不同的可书签 URL/状态。
但是为什么一个应用程序需要超过 1ActivityManager
和Activity Mapper
?似乎没有 GWT 对哪个Place
映射到哪个Activity
...
我听说过一些策略,每个显示区域都有自己的ActivityManager
. 看起来我也喜欢这样只会让你的项目更复杂而没有提供任何真正的好处。提前致谢!
java - 添加到 GWT RootPanel 还是仅设置默认视图?
我有以下 GWT 类:
- 如果我只是要在模块加载时调用并显示,为什么我需要添加
MyDefaultView
到?RootPanel
PlaceHistoryHandler#handleCurrentHistory()
MyDefaultView
- 如果我不应该
MyDefaultView
直接添加到RootPanel
,那么我应该添加什么?
提前致谢!
java - GWT 活动/地点应该是单例还是原型?
这之间有什么区别(性能和其他):
和:
换句话说,我是否Place
一遍又一遍地重复使用相同的“单例”,或者我每次请求时都实例化一个新的,有什么区别。
此外,对于Activity
s 内部的相同问题ActivityMapper
。再次感谢!