formfactor
あなたが説明するのと同じくらい簡単です。つまり、プロパティとその値を選択する方法を理解したら、それは簡単です。
エントリポイントを作成してモジュールで宣言すると、コンパイラは を使用GWT.create
して実際にそのインスタンスを作成します。これにより、モジュールで宣言された再バインド規則が適用されます。したがって、WebAppEntryPoint
との両方MobileAppEntryPoint
が共通のスーパークラスから継承する場合、モジュールでそのエントリポイントを宣言し、それらが選択されるようにするために作成したルールをわずかに変更できます。
<entry-point class="webapp.client.AbstractAppEntryPoint" />
<replace-with class="webapp.client.WebAppEntryPoint">
<when-type-is class="webapp.client.AbstractAppEntryPoint" />
<when-property-is name="formfactor" value="desktop"/>
</entry-point>
<replace-with class="webapp.client.MobileAppEntryPoint">
<when-type-is class="webapp.client.AbstractAppEntryPoint" />
<when-property-is name="formfactor" value="mobile"/>
</entry-point>
これらのルールは次のように述べていAbstractEntryPoint
ます。EntryPoint
GWT.create(AbstractEntryPoint)
formfactor
desktop
WebAppEntryPoint
GWT.create(AbstractEntryPoint)
formfactor
mobil
MobileAppEntryPoint
これで難しい部分が残ります。どのようにしてformfactor
プロパティを構築し、可能な値を定義し、アプリが起動時に適切な値を選択できるようにするのでしょうか?
これに答えるために、GWT に既に存在する 2 つの標準プロパティと を見てみましょlocale
うuser.agent
。ユーザー エージェントの検出は com.google.gwt.useragent.UserAgent モジュールで管理されます。プロパティが定義され、プロパティを選択する方法がリストされ、いくつかの役立つ「この配線が機能していることを確認する」ビットがアプリに追加されます。可能なロケールは com.google.gwt.i18n.I18N で開始されますが、独自のアプリ内で拡張できるように設計されています。ここにも多くの余分なものがあり、どのロケールを有効にするかを選択する方法を定義しています。user.agent から可能なフォームファクタを事前に定義するというアイデアを盗み、ロケール コードから適切なフォームファクタを読み取るというアイデアが必要になります。
まず、プロパティを定義します。
<define-property name="formfactor" values="desktop, mobile" />
この例では、これら 2 つの可能な値のみを許可します。実際には、デスクトップ (大とマウス/キーボード)、タブレット (大とタッチ)、電話 (小とタッチ)、またはこれの他のバリエーションが必要になる場合があります。 .
次に、正しいプロパティ値を読み取る方法を決定します。これを行うには 2 つの基本的な方法があります。モジュール ファイルに記述された JavaScript の単純なスニペットを使用する方法と、いくつかの構成設定に基づいて JavaScript を生成するクラスを作成する方法です。最初に最も単純なものを使用し、javascript でこの詳細を実際に検出する方法を考えてみましょう (必要なもの/必要なもの/期待するものをさらに明確にできる場合は、質問またはコメントを更新してください):
<!-- borrowing/adapting from
http://code.google.com/p/google-web-toolkit/wiki/ConditionalProperties -->
<property-provider name="formfactor"><![CDATA[
{
var ua = window.navigator.userAgent.toLowerCase();
if (ua.indexOf('android') != -1) { return 'mobile'; }
if (ua.indexOf('iphone') != -1) { return 'mobile'; }
return 'desktop';
}
]]></property-provider>
繰り返しますが、これはモジュールに入り、値を選択する単純な JavaScript を定義しますformfactor
。ユーザーエージェントに文字列 'android' または 'iphone' が含まれている場合は mobile
値をアクティブにし、そうでない場合は activate を指定しdesktop
ます。このコードは.nocache.js
ファイルに配置され、適切な順列を選択するために使用されます (上記で定義したように、適切なエントリポイントを使用)。