Gwt 超级链接与锚

Gwt 超级链接与锚,gwt,Gwt,何时使用超链接,何时使用锚定 使用超链接时如何处理单击? 不推荐使用com.google.gwt.user.client.ui.Hyperlink.addClickHandler(ClickHandler) com.google.gwt.user.client.ui.Hyperlink.addClickListener(ClickListener)也不推荐使用 Doc建议使用锚定#添加ClickHandler,但在使用超链接时如何使用锚定#添加ClickHandler 这是否意味着,如果我需要处

何时使用超链接,何时使用锚定

使用超链接时如何处理单击? 不推荐使用com.google.gwt.user.client.ui.Hyperlink.addClickHandler(ClickHandler) com.google.gwt.user.client.ui.Hyperlink.addClickListener(ClickListener)也不推荐使用

Doc建议使用
锚定#添加ClickHandler
,但在使用超链接时如何使用锚定
#添加ClickHandler


这是否意味着,如果我需要处理点击,我应该始终使用
锚定
,而不要使用
超链接

这是一个很好的问题,因为它非常简单,但却为许多GWT程序员打开了一个全新的领域。我对这个问题投了赞成票,只是因为它可以为人们探索GWT的功能提供一个很好的引导

Anchor是一个用于存储和显示超链接的小部件——本质上,Anchor很好地描述了它:

用作“内部”超链接的小部件。也就是说,它是一个链接 转到正在运行的应用程序的另一个状态。单击时,它将 使用history.newItem(java.lang.String)创建一个新的历史框架, 但不需要重新加载页面

作为一个真正的超链接,用户也可以 “右键单击,在新窗口中打开链接”,这将导致 要在新窗口中以指定的状态加载的应用程序 超链接

第二句话应该有助于澄清问题。超链接不会以URL的方式改变页面(锚定的方式),尽管URL会通过在斜杠后显示与附加到基本URL的超链接相关联的“标记”来反映程序的状态。您可以定义令牌。它可能是一些描述性的东西,比如“登录”、“帮助”或“关于”。但这不是新的一页。例如,您不需要构造额外的HTML文件来显示帮助页面。正在更改的是当前GWT应用程序的状态。即使您“在新窗口中打开”,您也只是在特定状态下运行相同的应用程序

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

这就引出了一个额外的话题

这个奖励有点复杂,但讽刺的是,它可以帮助更好地理解超链接。我说的更复杂,但实际上,它有助于巩固GWT应用程序由一系列状态组成的概念,并且屏幕上的网页只是用户对这些状态变化的感知。就是这样。Activities and Places抽象了这个历史框架操作,一旦你用GWT提供的类设置了一个映射器,就可以在后台处理它,这样你就可以将你的应用分解成一系列的活动,当用户通过这些活动进行交互时,他会被放到不同的地方,每个地方都有风景。此外,用户可以使用浏览器控件(如地址栏、书签、历史记录和后退/前进按钮)从一个地方移动到另一个地方,为用户提供真正的网络体验。如果您真的想掌握超链接和锚定之间的概念差异,您应该尝试学习GWT主题。它真的可以让你改变你看应用的方式,并且变得更好。

Hyperlink
(或
InlineHyperlink
)基本上不过是一种
锚定
,带有一个调用
历史记录的
点击处理程序(这样链接就不会被实际遵循)。
实际上,
Hyperlink
如果认为(是的,这只是猜测)您右键单击或中键单击(或按ctrl键单击)链接(取决于浏览器)以在新窗口或选项卡中打开链接,则不会这样做

如果您需要任何其他行为,那么不要使用
超链接
,而是使用
锚定
。如果您想向
超链接
添加一些行为,那么请使用
锚定
并模仿
超链接
的功能。您可以重用
超链接impl
来进行右键单击/ctrl单击处理(见下面的链接)

但实际上,如果您需要一个看起来像链接的东西,并在单击时执行某些操作,但没有“目标URL”(即,不应该右键单击/ctrl键单击它以在新窗口/选项卡中打开,否则这并不意味着要这样做),然后不要使用
锚定
超链接
,而是使用
标签
,让它看起来像一个链接(但是,也许你应该使用
按钮
,然后让它看起来像一个按钮;谷歌过去有类似链接的按钮,比如“刷新”GMail中的链接/按钮——当它们实际上不是链接时,将它们改为按钮)


另请参见和

谢谢,如果超链接未更改URL,为什么它会影响历史记录?因为浏览器中的历史记录是U