我使用JQuery动态附加GWT脚本,然后使用JQuery历史跟踪历史记录。
问题:我的GWT模块生成History
令牌,因为我的所有GWT模块都是MVP模块。并且onClick()
的{{1}} s动态加载GWT模块,以及我正在使用JQuery添加MenuItem
的历史记录。但我的GWT模块也使用MenuItems
。现在的问题是,如果我重复点击加载History
的{{1}},我的浏览器会被点击。
码
MenuItem
答案 0 :(得分:0)
您是否尝试过禁用GWT的历史记录?
阅读官方文档here
To use GWT History support, you must first embed an iframe into your host HTML page.
<iframe src="javascript:''" id="__gwt_historyFrame"
style="width:0;height:0;border:0" />
尝试删除它,再次编译模块。
无论如何只是为了好奇,为什么你使用jQuery注入GWT的脚本?我认为以相反的方式做得更好。
您可以创建一个Activity和Places desing,以一种非常简单的方式控制您的History,并使用GWT的脚本注入器为您的jQuery脚本。
final JavaScriptObject idScript = $(window).prop("IDSCRIPT");
if (idScript == null){
ScriptInjector.fromUrl("js/jq/myJqueryScript.js").setCallback(
new Callback<Void, Exception>() {
public void onFailure(Exception reason) {
AppConf.C("Trying to inject js/fb/myJqueryScript. Fail.");
}
public void onSuccess(Void result) {
executeMyStuff(...);
}
}).inject();
} else {
executeMyStuff(...);
}
答案 1 :(得分:0)
我认为您的设置非常复杂,我不知道您在应用中需要这个的原因,但无论如何:
1-添加gwt-module时无法卸载它。因此,虽然您删除了脚本标记,但代码将加载到内存中,并且所有事件gwt都在exectution中添加了continue。
2-如果你的gwt-module更改历史记录令牌,你的jquery代码会监听历史事件,每次都会被调用。
3-此设置可以用于加载的第一个gwt模块,但是第二个模块会干扰第一个模块,因为两个模块都在同一个事件中添加了某些事件处理程序。所以加载的每个mvp gwt-module都在监听历史事件,鼠标事件等,你会得到不确定的行为。
也许如果您对应用程序架构和要求有更多解释,我们可以找出最合适的设置。