2010-07-29 92 views
4

我在仪表板应用程序中遍历数据并生成参数化URL(链接到同一页面,但带有参数)。但是,我这样做的方式需要在用户单击链接时刷新页面。更新网址而不刷新

生成URL与一个StringBuilder

Detailhtml.append("<a href=\"http://" + domain + "&service=" + count +"&day=" + day +"\"><img src=\"/info.jpg\" alt=\"Info\"/>"); 

有没有一种方法,我可以动态创建GWT按钮,或引发一些JavaScript来添加参数不需要刷新页面?

任何帮助将是巨大的......

回答

5

页面将会刷新,如果说之前的片段(#)更改URL的任何部分。所以如果你从foo.com#a到foo.com/?bar=baz#a,就会触发页面刷新。

解决这个问题的最好方法就是在片段之前不要改变任何东西。将foo.com/?bar=baz更改为foo.com/#bar=baz(或某种变体),并让GWT应用程序通过调用History.addHistoryListener(...)来侦听History更改。

然后,当您听到历史更改时,解析URL中的片段并相应地更新您的应用。

一些图书馆如gwt-platform提供了一个包装这个功能,并让你描述Places,当片段更新以匹配它们时,它将被触发。如果你最终在片段上做了很多复杂的事情,最好查看一下地方。但是,如果你只是传递一些参数,只需要听取History的更改即可离开。

+0

伟大的杰森,我不知道。所以,为了做到这一点,我需要在第一次加载时向我的URL插入一个#号? – tpow 2010-07-29 13:48:21

+2

不是在第一次加载时 - 每当你想添加/更改网址中的内容时。例如,查看GMail如何根据状态更改更改其URL。 – 2010-07-29 14:13:00

+0

伊戈尔是正确的。尽管你可以用#foo = bar加载页面,并且在你的GWT代码加载时处理这个页面,如果你想让它在这个状态下加载的话。但是你应该确保你裸露的无#网址仍然有效。 – 2010-07-29 15:13:20