JQuery和GWT History支持混淆了

时间:2013-06-05 17:23:28

标签: jquery gwt

我使用JQuery动态附加GWT脚本,然后使用JQuery历史跟踪历史记录。

问题:我的GWT模块生成History令牌,因为我的所有GWT模块都是MVP模块。并且onClick()的{​​{1}} s动态加载GWT模块,以及我正在使用JQuery添加MenuItem的历史记录。但我的GWT模块也使用MenuItems。现在的问题是,如果我重复点击加载History的{​​{1}},我的浏览器会被点击。

MenuItem

2 个答案:

答案 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都在监听历史事件,鼠标事件等,你会得到不确定的行为。

也许如果您对应用程序架构和要求有更多解释,我们可以找出最合适的设置。