0

我正在尝试使用 GWT 开发 Documentum D2 外部小部件。D2 提供了一个来自 OpenAjaxHub 的内置 JavaScript 的 API 用于通信。

因此,我尝试将此 API 导入公共文件夹中的 GWT 应用程序,并将脚本添加到我的 gwt.xml 中。

所以,做这样简单的事情......

public class WidgetTest implements EntryPoint {

    @Override
    public void onModuleLoad() {
        final RootLayoutPanel rp = RootLayoutPanel.get();

        rp.add(new Label("Hello"));
        init();
    }

    private native void init() /*-{ 
            var d2OpenAjaxHub = new D2OpenAjaxHub();
    }-*/;
}

我得到错误:

com.google.gwt.core.client.JavaScriptException: (ReferenceError) @com.vilt.widgetTest.client.WidgetTest::init()([]): D2OpenAjaxHub 未定义

gwt.xml...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.6.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.6.0/distro-source/core/src/gwt-module.dtd">
<module rename-to="widgetTest">
    <inherits name="com.google.gwt.user.theme.clean.Clean" />
    <inherits name="com.google.gwt.user.User" />

    <script src="OpenAjaxManagedHub-all.js" />
    <script src="D2-OAH.js" />

    <source path="client" />

    <entry-point class="com.vilt.widgetTest.client.WidgetTest" />
</module>

关于 D2-OAH.js(我只提取了一点):

D2OpenAjaxHub = function() {

    this.hubClient = null;

    if (typeof(console) == 'undefined')
        console = {};

    if (typeof(console.log) == 'undefined')
        console.log = function(){};

    if (typeof(console.debug) == 'undefined')
        console.debug = console.log;

    if (typeof(console.error) == 'undefined')
        console.error = console.log;


    // ///////////////////
    // CONTEXT / WIDGET INFO
    // ///////////////////

    this.sContextUid = null;
    this.sWidgetType = null;
    this.sWidgetId = null;
    this.bActive = true;

    // ///////////////////
    // EVENTS
    // ///////////////////
    this.registeredChannelIds = new Array();
    this.registeredChannels = new Array();

    this.sStoredChannel = null;
    this.sStoredMessage = null;
    this.fStoredCallback = null;
    this.bStoredMessageConsumed = false;

}

function D2OpenAjaxHub() {
}

有人知道发生了什么吗?

4

2 回答 2

0

您不能简单地从您的 GWT 代码中调用第三方库。您需要使用 JSNI:

JavaScript: JSNI - GWT 项目

于 2014-05-26T22:44:01.203 回答
0

首先,您必须通过当前窗口 $wnd 调用您的方法。

native void myMethod() /*-{
  $wnd.myMethodThatCallsTheJsFile();
}-*/;

如果它仍然无法以这种方式调试:

你检查过js真的注入你的页面了吗?(右键点击结果页面,查看 HTML 源代码)

如果是,请尝试将 js 直接放在您的页面中(可能在导入 js 之前调用该方法)

于 2014-05-26T23:24:21.627 回答