0

CanvasElementクラスの独自の実装を提供したいと考えています。このクラスは、PlayNスタックのHTMLGraphicsCanvasクラスでインスタンス化されます。

これを行うための理想的な方法は何ですか?私が試したが失敗した2つの方法があります:

A)HTMLGraphicsとHTMLPlatformをサブクラス化しますか?-これは不可能のようです。

B)GWTモジュールメカニズムでは、GWTが提供するクラスのカスタム実装が同じパッケージである必要があるようです。したがって、たとえば次のXMLスニペットを取り上げます。

<replace-with class="com.google.gwt.dom.client.DOMImplOpera">
    <when-type-is class="com.google.gwt.dom.client.DOMImpl"/>
    <when-property-is name="user.agent" value="opera"/>
</replace-with>

私が次のようなことをした場合:

<replace-with class="com.domain.example.CustomCanvasElement">
    <when-type-is class="com.google.gwt.dom.client.CanvasElement"/>
    <when-property-is name="user.agent" value="opera"/>
</replace-with>

...パッケージが異なるため、機能していないようです。少なくともそれが起こっていると私は思います。

他のアイデアはありますか?とても有難い。

4

1 に答える 1

0

わかりましたので、私自身の質問の B) の部分に答えることができます。私自身の実装をどのように提供するかについての私の全体的な質問への回答を本当に感謝しています.

したがって、私の推測は完全には正しくありませんでした。Deferred Bindingのこのセクションによると、基本的に、まずブラウザ固有のオブジェクトがサブクラス化するスーパークラス オブジェクトを作成する必要があります。たとえば、次のようになります。

GenericBrowserObjectはスーパークラスであり、ブラウザー固有のオブジェクト間で特定のメソッドの共通の実装を持っているか、他のすべての (非固有の) ブラウザーの「キャッチオール」実装である可能性があります。

たとえば、IE および Gecko ベースのブラウザ用の特定の実装のみが必要だとします。

GeckoBrowserObject extends GenericBrowserObject

IEBrowserObject extends GenericBrowserObject

setStyleで呼び出される共通のメソッドがあり、 と の間でGenericBrowserObject実装が異なるとします。その場合、これらの各クラスでオーバーライドし、独自の実装を提供します。GeckoBrowserObjectIEBrowserObjectsetStyle

これらのオブジェクトを操作するGenericBrowserObjectクラスは、次の方法でスーパークラスをインスタンス化する必要があります。

    GenericBrowserObject obj = GWT.create(GenericBrowserObject.class);
    obj.setStyle("whatever");

次に、モジュール ファイル (something.gwt.xml) には、次のようなものがあります。

    <replace-with class="com.domain.blah.GenericBrowserObject">
            <when-type-is class="com.domain.blah.GenericBrowserObject"/>
    </replace-with>

    <replace-with class="com.domain.blah.IEBrowserObject">
            <when-type-is class="com.domain.blah.GenericBrowserObject"/>
            <any>
                    <when-property-is name="user.agent" value="ie6"/>
                    <when-property-is name="user.agent" value="ie8"/>
            </any>
    </replace-with>

    <replace-with class="com.domain.blah.GeckoBrowserObject">
            <when-type-is class="com.domain.blah.GenericBrowserObject"/>
                    <any>
                            <when-property-is name="user.agent" value="gecko"/>
                            <when-property-is name="user.agent" value="gecko1_8"/>
                    </any>
    </replace-with>

GWT がこれをコンパイルすると、GWT.create を介してユーザー エージェント文字列に基づいて正しいオブジェクトが生成されます。

于 2013-02-05T17:41:09.407 に答える