超链接与主播

jav*_*red 22 gwt

何时使用HyperLink以及何时使用Anchor?

使用HyperLink时如何处理点击?不推荐使用com.google.gwt.user.client.ui.Hyperlink.addClickHandler(ClickHandler)com.google.gwt.user.client.ui.Hyperlink.addClickListener(ClickListener).

Doc建议使用Anchor#addClickHandler,但在使用HyperLink时如何使用Anchor#addClickHandler

这是否意味着如果我需要处理点击我应该总是使用Anchor,从不使用HyperLink

Ste*_*e J 23

很棒的问题,因为它非常简单,但却为许多GWT程序员开辟了一个全新的领域.我已经投了这个问题,因为它可以成为人们探索GWT可以做什么的一个很好的引导.

Anchor是一个用于存储和显示超链接的小部件 - 基本上是<a>标签.真的没有那么令人兴奋.如果您希望页面链接到某个外部站点,请使用锚点.

链接也用于内部导航.假设我有一个需要用户登录的GWT应用程序,所以在我的第一个面板上我放了一个登录按钮.当用户点击它时,我会显示一个带有小部件的新面板来收集用户的信息,验证它的代码,然后如果成功验证,则重建用户所在的第一个面板.

按钮很好,但这是一个浏览器,我希望我的用户体验更像是一个网页,而不是一个桌面应用程序,所以我想使用链接而不是按钮.超链接做到了这一点.超链接文档描述得很好:

用作"内部"超链接的小部件.也就是说,它是指向正在运行的应用程序的另一个状态的链接.单击时,它将使用History.newItem(java.lang.String)创建新的历史记录框架,但不重新加载页面.

作为真正的超链接,用户还可以"右键单击,在新窗口中打开链接",这将导致应用程序在超链接指定的状态下加载到新窗口中.

第二句应该有助于澄清它.超链接不会在URL意义上改变页面(锚的方式),尽管URL将通过显示与斜杠后附加到基本URL的超链接相关联的"标记"来反映程序的状态.您定义令牌.这将是描述性的东西,如"登录"或"帮助"或"约".但这不是一个新页面.例如,您无需构建其他HTML文件来显示帮助页面.这是当前GWT应用程序的状态正在发生变化.即使您"在新窗口中打开",您只是在特定状态下运行相同的应用程序.

它看起来像一个链接,但它实际上是一个操作历史框架的小部件,这反过来又允许您移动GWT应用程序的状态.您没有为超链接小部件编写单击处理程序,而是为历史堆栈编写值更改处理程序.当您看到"帮助"标记已放在历史堆栈上时,您的处理程序将执行GWT代码以将带有嵌入式HTML文本的FlowPanel附加到RootPanel以及您的帮助信息.这被用户视为"新页面",这是他在点击超链接时所期望的.该URL将是something.html/help.现在假装他通过后退按钮返回此URL,而不是您的超链接.没问题.你不关心超链接点击.你只关心历史堆栈的变化.您的值更改处理程序再次触发,并执行与以前相同的操作以显示帮助面板.用户仍然享受浏览网页的体验,即使您和我知道只有一个网页,并且您正在将面板附加到RootPanel(或用于显示GWT面板的任何方案).

这导致了一个奖金主题.

这个奖金有点复杂,但具有讽刺意味的是,它可以帮助更好地理解超链接.我说更复杂,但实际上,它有助于巩固这一观念,即GWT应用程序由一系列状态组成,并且屏幕上的网页只是用户对这些状态变化的感知.这就是活动和场所.活动和地点抽象出这个历史框架操作,一旦你设置了一个GWT提供的专门用于此目的的映射器,就可以在后台处理它,允许你将你的应用程序分解为一系列活动,并且用户通过这些活动进行交互,他被放置在不同的地方,每个地方都有一个视图.此外,用户可以使用地址栏,书签,历史记录和后退/前进按钮等浏览器控件从一个地方移动到另一个地方,从而为用户提供真实的网络体验.如果你真的想要掌握超链接和锚点之间的概念差异,你应该尝试学习这个GWT主题.它真的可以让你改变你看到你的应用程序的方式,并且更好.


Tho*_*yer 6

Hyperlink(或InlineHyperlink)基本上只是一种Anchor具有ClickHandler调用History.newItempreventDefault()事件(以便实际上不遵循链接).
实际上,Hyperlink如果它认为(并且只是猜测)你不会这样做,你在链接上右键单击或中键(或按住Ctrl键单击)(取决于浏览器),在新的链接中打开链接窗口或标签.

如果您需要任何其他行为,请不要使用Hyperlink和使用Anchor.如果你想为a添加一些行为Hyperlink,那么使用an Anchor并模仿它的Hyperlink作用.您可以重复使用HyperlinkImpl右键单击/按住Ctrl键单击处理(请参阅下面的链接).

但实际上,如果您需要看起来像链接的东西并在点击时执行某些操作,但没有"目标URL"(即不应右键单击/按住Ctrl键单击以在新窗口/选项卡中打开,或者它并不意味着要做任何事情),然后不要使用ANchorHyperlink,使用Label任何替代,并使它看起来像一个链接(但好吧,也许你应该使用一个Button,让它看起来像一个按钮然后; Google过去常常使用类似链接的按钮 - 例如GMail中的"刷新"链接/按钮 - 当它们真的不是链接时将它们改为看起来像按钮).

另请参阅https://groups.google.com/d/msg/google-web-toolkit/P7vwRztO6bA/wTshqYs6NM0Jhttps://groups.google.com/d/msg/google-web-toolkit/CzOvgVsOfTo/IBNaG631- 2QJ