問題タブ [gwt-activities]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gwt - 場所ごとに画面レイアウトが変わるときのアクティビティと場所を使用した GWT
GWT のアクティビティと場所についての私の理解では、画面上の特定の領域に対して と がActivityManager
ありActivityMapper
ます。画面上に複数の領域を持つことができます。つまり、複数のActivityManagers
and ActivityMappers
(領域ごとに 1 つ) を持つことができます。そのため、が与えられたときに表示されるはずのアクティビティをそれぞれPlaceChange
に尋ねるときはいつでも。これは、さまざまなアクティビティを実行するためにさまざまな方法で再利用する共通のレイアウトがある限り、うまく機能します。私の質問は、異なるユーザーが根本的に異なるレイアウトを使用する場合をどのように処理するかということです。私の最初の考えは、さらに多くのとを使用することです。 が特定のリージョンを使用しない場合は、ActivityManagers
ActivityMapper
Place
Places
Places
ActivityManagers
ActivityMappers
Place
ActivityMapper
for that region はnull
、それに変更すると単純に返されPlace
ます。より良い方法があれば、知恵をいただければ幸いです。
java - GWTコード分割の統合:MVPとアクティビティ/場所
AcceptsOneWidget
タブ付きペインを含む「表示領域」( )があるとします。別のタブをクリックすると(つまり、「fantastico」から「profile」に移動すると)、ペイン内にまったく新しいコンテンツが表示されます。ユーザーが[プロファイル]タブをクリックするまで、表示に必要なコードをダウンロードする必要がなかったため、これはコード分割の完璧なユースケースのようです。(注: GWTの達人が同意せず、これがコード分割の正しいユースケースであると思わない場合は、それを私に指摘してください。ただし、それはこの質問のポイントを超えているので、我慢してください!)
さて、基本的なGWTアーキテクチャの理解が正しければ、「プロファイル」タブを表示するために必要なコードは、 Activity
(ies)、 (s) 、おそらく、、、Place
などのMVPのもので構成されます。もちろんこれアプリケーションと開発者によって異なりますが(GWTで学んだように、同じ目的を達成する方法はたくさんあります)、それでも、MVP/アクティビティ/場所の「もの」の集まりです。この質問のために、私はこのSO質問の回答者によって提案されたモデルが好きです。Presenter
Module
EntryPoint
AsynchProviderパターンに関するこの記事を読んだ後、これらすべてのベストプラクティスを結び付けて、次のアーキテクチャを実現しようとしています。
- ペインの各タブが独自のフラグメントとしてcodesplit(codesplitted?codesplat?)になるようにコード分割を実装し、ユーザーが初めてクリックした場合にのみダウンロードします
- 各フラグメント(タブ/ペイン)を表示/レンダリング/実装するために必要なすべてのコードは、きちんと整理されており
AsynchProvider
、上記の記事で参照されているパターンに従います。これにより、コンパートメント化でき、他のフラグメントに依存しなくなります
私はすべての要素をまとめ始めていますが、これら2つの概念を実際のコードでどのように結び付けることができるかはまだわかりません。
GWTは神秘的で、強力で、すばらしいものであると感じていますが、実際のコード例がないと学ぶのは非常に困難です。もちろん、これらのワイヤーフレームは「fantastico」または「profile」ペインで実際には複雑さを示していないので、これらは両方とも豊富なUIコンポーネントを備えたかなり洗練された表示領域であることに耐えてふりをしてください。前もって感謝します!
java - GWT MVP: プレゼンター、アクティビティ、ディスプレイ、場所の点をつなぐ
私は、GWT の主要な API 機能のほとんどを利用する、最初の超単純な GWT アプリを設計しようとしています。私はそこまでの道のりの約 70 - 80% だと思いますが、GWT のドキュメント、無数の記事、および他の多くの GWT 関連の質問を SO に投稿した後でも、最後の 20 を理解するのにまだ苦労しています -このアプリを完全に配置するには 30% が必要です。
この最初の test app を呼び出し、次のClickItToWinIt
ように表示します。
ユーザーが「Win」ボタンをクリックするwin-pic.png
と、左側の画像フレームに画像 (「 」) がポップアップ表示されます。ユーザーが「Lose」ボタンをクリックするlose-pic.png
と、同じフレームに画像 (" ") がポップアップ表示されます。ユーザーは、ボタン間を前後にクリックして、さまざまな画像を表示できます。これは、私のマシンでローカルにホストされる単一ページのアプリであり、1 つのホームページ、1 つのモジュール/エントリポイントなどを含めるだけで済みます。
ClickItToWinIt
以下で提案されているパッケージ化/クラス構造は、このような単純なアプリには確かにやり過ぎであることに注意してください。しかし、近いうちに GWT を使ってより大きくより良いものに移行したいと考えているため、より複雑な UI を備えたより大きなアプリに取り組む前に、適切な GWT コーディングを理解することが重要です。
また、以下で提案されている構造は、Google が絶え間なく奨励しているように見える 3 つの GWT 原則に基づいています。
- パフォーマンス; クライアント側の速度
- 安全
- テストを容易にするための関心の分離 (MVP など)
ここで最後の項目: 通常、私の PHP webdev 時代には、同じ DOM 要素に異なるスタイリング ルールを単純に適用する別の CSS ファイルを使用してサイトをデプロイすることで、一部のサイトで "テーマ/スキン" の概念を使用していました。したがってnormal-styles.css
、サイトを「通常」に見せる " facebook-styles.css
" ファイルと、サイトに Facebook などのルック アンド フィール (色、フォントなど) を与える " " ファイルがあるとします。ここで同じことを達成したいと思っており、サブクラスnet.bfodder.c2w.client.views.themes
を持つパッケージを提案しています。AbstractTheme
これらのサブクラスは、ビルド時に何らかの方法でビュー/プレゼンターに注入/焼き付けされ、別のテーマまたはスキンでアプリを展開する方法を提供します。ClientBundle
CssResource
が正しいです) GWTはGWT POJO にオブジェクト化された CSS スタイルを持っているようです。私のサブクラスは、私のすべての のスタイルにAbstractTheme
何らかの形で関連付けられ、定義されます。CssResource
Widget
したがって、提案されたsrc/main/java
構造は次のClickItToWinIt
とおりです(私はGoogle-Eclipseプラグインを使用してEclipse 3.7 Indigoで開発しています):
これは、特定のサブクラスAppController
に属さない、変わったアプリ レベルのビジネス ロジック用です。IPresenter
ここMainModule
ですべてが開始されます (DI、予選Activity
の開始など)。ボタンは 内ButtonContainer
に配置され、 は内ImageViewer
に配置されImageContainer
、これらの両方の内部コンテナーは 内に配置されますMainContainer
(これは で作成されていると想定MainModule
しています)。これらの UI コンポーネントのレイアウトとスタイルに関しては、先ほど述べたようにAbstractTheme
、ルール セットで注入/構成された定義によって決まります。
アプリの GWT 配管の主要部分に簡単にアクセスできるように、ここClientFactory
で推奨されている を使用しています。
MVPの「もの」に関しては、私が考えていたことは次のとおりです。
質問)!
私が上で言ったように、私はほとんどそこにいると信じています.いくつかのギャップを埋めるのに苦労しています. だから私は尋ねます:
AbstractTheme
サブクラスを接続して使用CssResource
しClientBundle
、アプリが正しいテーマで挿入/構成され、クライアント ブラウザーが正しい CSS ファイル (normal-style.css
または) をダウンロードするようにするにはどうすればよいfacebook-style.css
ですか?IPresenter
誰かが(クラシック MVP から)AbstractActivity
、「表示領域」(AcceptsOneWidget
) とPlace
s の関係を適切に説明できますか? ここに 1 対 1 対 1 対 1 の関係がありますか、それとも GWT の意図は、たとえば、すべてAbstractActivity
の 、またはその他の比率のセットに対して複数の表示領域を持つことですか?WinPlace
を GWT の History APIに接続するにはどうすればよいですか? ユーザーがWinButton
,LoseButton
,をクリックした場合、WinButton
それをブラウザの履歴に保存して、ブラウザの進む/戻るボタンを押して、この使用パターンを何度も再現できるようにするにはどうすればよいでしょうか?- が
WinButton
クリックされると、イベント バスにいくつかのクリック イベントが配置されます。ImageViewer
(a) 内の画像を変更し、(b) この状態の変更を History API に保存することを認識する EventBus にハンドラー/リスナーを接続する場所と方法は? - のアイデアはこの記事
AppController
から得ましたが、残念ながらが実際にどのように見えるかについてのコード スニペットは提供されていません。誰でも ( GWT のパターンに精通している)、これがどのように見えるかについて光を当てることができますか? おそらく、特定のコンポーネントやビューコンポーネントを持たないサブクラスでしょうか?AppController
AppController
IPresenter
Activity
- 一般的に、この種の " amidoinitrite? " スタイルの質問は SO では推奨されないことを私は知っていますが、戦場で使い古された GWT の退役軍人に尋ねなければなりません: 私はここで基地から外れているのでしょうか、それとも多かれ少なかれでしょうか? GWT のベスト プラクティスに沿って進んでいますか? 助言がありますか?
ここでそのような「スーパークエスチョン」をするのは嫌いですが、SO を 6 つの中規模の質問で混乱させて、同じ問題のセットアップを何度も繰り返し続けるよりも、むしろこれを行います。さらに、適切なコード例があれば、おそらく 6 つすべてに一挙に答えることができるので、ここでチャンスをつかみました。
前もって感謝します。
java - GWT: Places と ActivityMappers の粒度
私はついにGWTを「取得」し始めています。いつでも、次のようPlaceChangeEvent
にアプリで起動できます。EventBus
これにより、イベントがバスに追加されます。これにより、登録された はそれをActivityManager
すくい上げ、その内部を調べて、のに関連付けられたActivityMapper
を与えます。Activity
PlaceChangeEvent
Place
( Activity
MVP/MVC のプレゼンターまたはコントローラー オブジェクトと同様) は、(サーバーへの RPC 呼び出しを介して) 必要なデータを取得し、ビジネス ロジックを実行して、表示する最終的なビュー (通常Composite
は何らかの種類の) を構成します。
ホスト ページに表示領域が 1 つしかない非常に単純な GWT アプリについて話している限り、前述のように「理解」できます。
私がいま気になっているのは、アプリに複数の表示領域 (互いに非同期に更新できる領域) が含まれている場合にどうなるかということです。
だから私は尋ねます:
ActivityMapper
sはどの程度の粒度である必要がありますか? すべての s をすべてのies にAppActivityMapper
マップするアプリ全体が 1 つだけですか、それとも、複数のマッパーがある場合に何らかの階層/分解が必要ですか? (そして、これに対するあなたの答えが「これはアプリケーションのニーズに依存します」という行に沿ったものである場合は、適切なレベルの粒度を実現する要件/ニーズを説明してください!)Place
Activity
ActivityMapper
Place
aがアプリ内の URL トークンを表している場合(Place
a をブックマーク可能な状態にするため)、複数の表示領域 (D1、D2、D3) を持つより複雑なアプリがあるとどうなりますか。1 つの URL トークン (つまり ) はどのようhttp://myapp.com/#token-for-some-new-place
に D1、D2、および D3 にマップされますか? つまり、すべてのメソッドが呼び出されるアクティビティ ( )ActivityMapper#getActivity
のリストを返すことができなければならないということではないでしょうか?List<Activity>
start(AcceptsOneWidget, EventBus)
ここで助けてくれてありがとう - コード例は常に揺れ動く.
java - 特定のウィジェットで GWT Activity#start を挿入する方法は?
次の親コンテナがあります。
したがって、ユーザーが 内の TextButtons の 1 つをクリックするとbuttonPanel
、contentPanel
の内容が変更されます。アクティビティ/場所フレームワークを使用して、TextButton の各クリックを履歴に記憶させようとしています。したがって、ユーザーが「赤」、「緑」、「青」のボタンをそれぞれcontentPanel
クリックすると、 が 3 回変化し、[戻る]/[進む] ブラウザの履歴ボタンをクリックして、履歴を前後に移動し続けることができます (および "再生」ボタンを何度もクリックするなど)。
次のクラスもあります。
次のように配線することを計画しています。
PlaceController.goTo(new RedButtonPlace())
最終的にはRedButtonActivity
PlaceController.goTo(new GreenButtonPlace())
最終的にはGreenButtonActivity
- など(すべてのボタンには、その色ごとに場所とアクティビティがあります)
私が行き詰まっているのは、クリックハンドラーPlaceController.goTo(new RedButtonPlace())
内から呼び出した場合、 updateをどこでどのように指示するのですか? RedButton
RedButtonActivity
contentPanel
例えば:
その最後の行がここでの鍵です: panel.setWidget(view)
. panel
それが であることをどのように確認しParentContainer#contentPanel
ますか? 前もって感謝します!
編集:1つの回答が示唆するように、コードの更新は次のとおりです。
これが正しい方法である場合、start(AcceptsOneWidget panel, EventBus eventBus)
メソッドが呼び出されたときに、引数redButtonActivityManager
の正しい表示を挿入することを知っていると思いますか?panel
java - GWTアクティビティとActivityMapperを適切に構成するにはどうすればよいですか?
私は次のクラスを持っています:
そのため、Activitiesフレームワークをある程度理解し始めていますが、それでも非常に新しいため、 Hello、GWTの例から離れようとすると、APIの障害にほぼ瞬時に遭遇します。
私のアプリのメインGWTモジュールでMyWebAppModule
、これら3つのオブジェクトをインスタンス化して構成しようとしています。しかし、APIの使用方法がまだわからないため、実装の問題が発生しています。
- 明らかに、私は正しく実装
DashboardActivityMapper
していないDashboardActivity
ので、インスタンスをインスタンス化して内部にワイヤリングしようとすると問題が発生しますMyWebAppModule#onModuleLoad
。誰かが私がこれを正しく実装するのを手伝ってもらえますか?実用的な例を見つけたら、アクティビティフレームワークの残りの「ドット」を接続できると確信しています。 - 私が何かを逃していない限り、
ActivityManager manager
上記は他のクラスに追加されていないようです。これは正しいです?GWTは、メモリ内で存続していることを確認して、常にリッスンしていることを確認しeventBus
ますPlaceChangeEvent
か?または、何かに追加/登録する必要がありますか?
前もって感謝します!
java - スクリーニングに対するアクティビティに対するGWTの場所の比率?
すべての「ページ」(場所)に同じテンプレートを再利用するGWTアプリを作成しようとしています。アプリには4つの主要な「ページ」があります。
- ダッシュボードページ(
http://www.mywebapp.com/#dashboard
) - 電卓ページ(
http://www.mywebapp.com/#calc
) - Configuratorページ(
http://www.mywebapp.com/#config
) - ログインページ(
http://www.mywebapp.com/#login
)
各「ページ」には、同じテンプレートのルックアンドフィールがあります。(1)ロゴとナビゲーションメニューを含むヘッダーセクション、(2)「ページ」固有のコンテンツを含むコンテンツセクション(つまり、#dashboard
場所、#login
場所など)、および(3)いくつかのリンクを含むフッターセクション。ご覧のとおり、ページごとに変わるのはコンテンツセクションだけです。通常のテンプレート化されたWebサイトと同じように。
重要なのは、各「ページ」(場所)は実際にはかなり複雑なUIであり、多くのウィジェットで構成される多くの異なるパネルがあります。ユーザーがアプリを操作すると、これらのパネルが存在しなくなり、表示が常に変化します。たとえば、#calc
ページ上で、ユーザーは電卓を表示する「モード」を基本または詳細のいずれかで選択できます。ユーザーが[詳細]を選択すると、(基本パネルに加えて)いくつかの追加パネルが表示されます。
このようなアクションを履歴に保持して、ユーザーが基本モードまたは詳細モードのいずれかでアプリをブックマークできるようにすると、次のようになります。
http://www.mywebapp.com/#calc/basic
; またhttp://www.mywebapp.com/#calc/advanced
ここに問題があります:
ここではすでにいくつかの「レベル」の活動/場所が行われています。「アプリ」レベルでは、ダウンロード時にユーザーに表示する必要のあるテンプレートがありMyWebAppModule implements EntryPoint
ます。これTemplatePlace
は、呼び出す前にHistoryHandlerに登録されるデフォルト/初期の場所です。
次に、すべての異なる「ページ」があります。 DashboardPlace
、、CalculatorPlace
など、すべて独自のビュー/表示があります。たとえば、ユーザーが[電卓]リンクをクリックしてに移動するCalculatorPlace
と、電卓を基本モードまたは詳細モードで使用することを識別した場合とは異なるビューが表示されます。
最後に、およびなど、各ページ/場所内にさまざまな表示領域、パネルなどがBasicCalculatorPlace
ありAdvancedCalculatorPlace
ます。これは、ナビゲーションのさまざまな「レベル」が意味するものです。
- アプリケーションレベル(すべてのページ/場所に適用するテンプレート)
- ページレベルまたは場所レベル
- ディスプレイレベルまたはパネルレベル
質問:
ユーザーが次のすべてを実行するときに、ブックマーク可能なURL(場所)を実現したいと思います。
- ホームページに移動します(
http://www.mywebapp.com
) - いずれかの「ページ」(
http://www.mywebapp.com/#calc
など)に移動します http://www.mywebapp.com\#calc\#advanced
ページ固有のパネルまたは表示構成(など)を引き起こすページ/場所を使用します
いくつのアクティビティと場所を作成しますか?ActivityManagerは何人ですか?ブックマーク可能なUIの「レベル」ごとに、アクティビティ/場所をどの程度細かくする必要があるかを尋ねていると思います。前もって感謝します!
java - 複数のGWTActivityManagerとActivityMappersの使用は何ですか?
ついに、そのメソッドが渡されActivityMapper
たサブクラスを解析/検査し、ユーザーに提示する適切なものを返すようにコーディングすることになっていることに気づきました。Place
getActivity(Place)
Activity
Place
だから、これは私に考えさせられました:あなたがあなたのアプリに多くの異なるサブクラスを必要とし、それぞれが異なるブックマーク可能なURL/状態を表すことは理にかなっています。
しかし、なぜアプリに1つ以上が必要になるのでしょうActivityManager
かActivity Mapper
。Place
どちらがどのマップにマッピングされるかについて、GWTによる制限はないようActivity
です...
各表示領域が独自のを取得するいくつかの戦略を聞いたことがありますActivityManager
。これは、実際のメリットを提供することなく、プロジェクトをより複雑にするだけのように思えます。前もって感謝します!
java - GWT RootPanel に追加するか、デフォルト ビューを設定するだけですか?
次の GWT クラスがあります。
- モジュールのロード時に呼び出して表示するだけなのに、なぜ に追加
MyDefaultView
する必要があるのですか?RootPanel
PlaceHistoryHandler#handleCurrentHistory()
MyDefaultView
MyDefaultView
に直接追加すべきではない場合RootPanel
、何を追加すればよいですか?
前もって感謝します!
java - GWT のアクティビティ/場所はシングルトンまたはプロトタイプのどちらである必要がありますか?
これの違い(パフォーマンスとその他)は何ですか:
と:
つまり、同じ「シングルトン」Place
を何度も再利用し続けるか、要求されるたびに新しいシングルトンをインスタンス化するかの違いは何ですか。
Activity
また、の中から sに対して同じ質問をしActivityMapper
ます。再度、感謝します!