0

Opentipを GWT プロジェクトに統合しようとしています。私のウィジェットの一部は HTML ではなく Java から読み込まれるため、これらのツールチップを適切にバインドするには JSNI を使用する必要があるようです。これまでに行ったことは次のとおりです。

  1. nocache.jsHTML ファイルで、関連する JS/CSS 宣言を GWT の前に置きます。(また、 を使用して JS の読み込みを複製しようとしましScriptInjectorたが、それはうまくいかなかったので、冗長としてそれを切り取りました。
  2. ツールチップをインスタンス化するための JSNI メソッドを作成しました。

    private native void initControlTooltips() /*-{
        var headerText = "Tooltip text";
        new $wnd.Opentip($("#tooltipTrigger"), headerText);
        // more tooltips...
    }-*/
    

上記の方法のさまざまなバリエーションを試しましたが、これが機能するはずの方法であると読みました(スライド20はこちらですが、スライドに直接リンクすることはできません)。これまでのところ、私には運がありませんでした.この最新の試みは、私にとって最も正しいと思われます.GWTモジュールの残りの部分が(ツールチップのインスタンス化呼び出しの後)、どこかに構文エラーがあるかのようにロードするのを実際に停止しました. 、コンソールは何も報告していませんが。私が間違っていることについてのアイデアはありますか?私はGWTとJSの両方に比較的慣れていないので、これが愚かな初心者の間違いであることを願っています.

まだ試していないことの 1 つは、Overlay オブジェクトのコーディングです。これは、ドキュメントから JS コンストラクターを適切にラップする方法がわからないためです。それがここでの解決策である場合、それを行う方法についてのいくつかの指針は大歓迎です。参考までに、私が使用するコンストラクター (Opentip のドキュメントから) は次のとおりです。

new Opentip("#my-trigger-element", "Optional content", "Optional title", { ...options... });

助けてくれてありがとう; これはそれほど難しい問題ではないように思えますが、これまでのところ、私の経験不足が私の努力を失敗させてきました。

アップデート

数時間の罵倒とパラメーターのいじりの後、私はこれを解決したので、デバッグを手伝おうとして時間を無駄にしないでください。今日、少し時間が空いたときに、答えを書きます。

4

1 に答える 1

0

これweb.gwt.xmlで、 、モジュール、およびEntryPointすべてのセットアップが完了しました。あなたがそれらのものを持っていないなら、これはあなたのための答えではありません. ドキュメントは、開始するのに悪い場所ではありません。この回答では Opentip を例として使用しますが、他の人でもうまくいかない理由がわかりません。ただし、これは特に、ウィジェットを GWT のみでセットアップし (HTML からはアクセスできない)、外部 JS をそれらにバインドしていくつかの機能を有効にする必要がある場合に適しています。

  1. をクラックして開き、web.gwt.xml使用するモジュールのエントリにライブラリのソースが含まれていることを確認します。これは、ページの静的 HTML でも特に必要がない場合は、宣言する必要がないことを意味します。

    <script src="../js/opentip/opentip-jquery.min.js"/>
    

    (注../- これは、GWT によって生成された HTML ファイルがサーバー上で終了する場所からの相対パスであり、Web サーバーからアクセスできる必要があります。)

  2. ライブラリを使用するモジュール クラスで、次のようにライブラリ コンストラクタを呼び出して JSNI メソッドを作成します。

    private native void initTooltip() /*-{
        new $wnd.Opentip($doc.getElementById("tooltipTrigger"), "Tooltip text");
    }-*/;
    

    ($wnd最上位ウィンドウ$docを参照するための と、ドキュメントを参照するための に注意してください。先頭に追加$wnd.すると、外部 JS ファイルで宣言/割り当てられたグローバル変数を参照できます。)

派手なオーバーレイ タイプやScriptInjector呼び出しは必要ありません。これを解決しているときに、もう 1 つの問題がありました。への呼び出しgetElementById()が戻っnullてきました。これは、関連するオブジェクトが .NET で DOM に追加される前に JSNI メソッドを呼び出していたことが原因であることが判明しましたonModuleLoad()

最初に考えたように、これは単純な初心者のミスであることが判明しました。これが、同様の質問に対する他の回答をつなぎ合わせて、問題の実行可能な解決策にしようとしている他の誰かに役立つことを願っています.

于 2013-10-14T23:46:26.147 に答える