1

リモートサーバー(アプリのサーバーではありませんが、それは問題ではないと思います)から画像を取得し、既存の画像ウィジェットに表示したいと考えています。既存のウィジェットは、 ClientBundle ImageResource からの元のコンテンツを表示します。

UiBinder テンプレート:

<g:Image ui:field='myImage' resource='{res.anImage}'/>

コード内:

@UiField Image      myImage;
...
int width = Window.getClientWidth();
int height = Window.getClientHeight();
String url = ...;

myImage.addErrorHandler(new ErrorHandler() {
    public void onError(ErrorEvent event) {
        Window.alert("Error getting image data: " + event);
    }
  });
myImage.addLoadHandler(new LoadHandler() {
    public void onLoad(LoadEvent event) {
        Window.alert("LoadEvent: " + event);
    }
  });
myImage.setUrlAndVisibleRect(url, 0, 0, width, height);

私が知る限り、 setUrlAndVisibleRect はノーオペレーションです。FireBug はネットワーク アクティビティを報告しません。つまり、URL で指定されたサーバーへの要求はありません。私は何を見落としていますか?これを機能させようとする私の拡張されたスラッシングで、myImageが「論理的に接続」されていないことに関係がある可能性があると推測しましたが、それが何を意味するのか完全にはわかりません。それが問題だ。

解決策の概要を編集: 私の最初の予感は正しかった。2 番目の疑似ウィジェット (...extends Composite) 私の UiBinder テンプレートを、私のアプリのほとんどの UI を実装するメインの疑似ウィジェットと共有していたので、問題が発生しました。EntryPoint を実装するクラスで通常行われているように、この 2 番目の疑似ウィジェットを RootPanel に追加することを怠っていました。これにより、親である 2 番目の疑似ウィジェットが接続されていなかったため、イメージ ウィジェットがウィジェット チェーンに接続されていません。また、動作させるには画像ウィジェットを添付する必要があります。私が最終的に行ったことは、Image コードをメインのアプリ/GUI クラスに戻すことです。つまり、最初の、現在は唯一の疑似ウィジェットに戻し、Image コードの特別なクラスを放棄しました。私がそうしたのは、それがより単純であり、Image コードが最初に考えていたほど長くないことが判明したためです。

4

2 に答える 2

0

あなたClientBundle ImageResourceコンパイル時に使用しています。新しい画像を前の画像の正確な位置にある正確な名前に置き換えない限り、変更することはできません。可能性のあるハックの 1 つは、ID が設定された div に画像を配置することです ( getElement().setId("your ID"))。新しい画像を取得したら、 RootPanel.get("Your Id")を使用して作業を行います。

于 2013-05-01T08:47:58.423 に答える