問題タブ [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.

0 投票する
1 に答える
321 参照

gwt - 場所ごとに画面レイアウトが変わるときのアクティビティと場所を使用した GWT

GWT のアクティビティと場所についての私の理解では、画面上の特定の領域に対して と がActivityManagerありActivityMapperます。画面上に複数の領域を持つことができます。つまり、複数のActivityManagersand ActivityMappers(領域ごとに 1 つ) を持つことができます。そのため、が与えられたときに表示されるはずのアクティビティをそれぞれPlaceChangeに尋ねるときはいつでも。これは、さまざまなアクティビティを実行するためにさまざまな方法で再利用する共通のレイアウトがある限り、うまく機能します。私の質問は、異なるユーザーが根本的に異なるレイアウトを使用する場合をどのように処理するかということです。私の最初の考えは、さらに多くのとを使用することです。 が特定のリージョンを使用しない場合は、ActivityManagersActivityMapperPlacePlacesPlacesActivityManagersActivityMappersPlaceActivityMapperfor that region はnull、それに変更すると単純に返されPlaceます。より良い方法があれば、知恵をいただければ幸いです。

0 投票する
1 に答える
137 参照

java - GWTコード分割の統合:MVPとアクティビティ/場所

AcceptsOneWidgetタブ付きペインを含む「表示領域」( )があるとします。別のタブをクリックすると(つまり、「fantastico」から「profile」に移動すると)、ペイン内にまったく新しいコンテンツが表示されます。ユーザーが[プロファイル]タブをクリックするまで、表示に必要なコードをダウンロードする必要がなかったため、これはコード分割の完璧なユースケースのようです。(注: GWTの達人が同意せず、これがコード分割の正しいユースケースであると思わない場合は、それを私に指摘してください。ただし、それはこの質問のポイントを超えているので、我慢してください!)

ここに画像の説明を入力してください

さて、基本的なGWTアーキテクチャの理解が正しければ、「プロファイル」タブを表示するために必要なコードは、 Activity(ies)、 (s) 、おそらく、、、PlaceなどのMVPのもので構成されます。もちろんこれアプリケーションと開発者によって異なりますが(GWTで学んだように、同じ目的を達成する方法はたくさんあります)、それでも、MVP/アクティビティ/場所の「もの」の集まりです。この質問のために、私はこのSO質問の回答者によって提案されたモデルが好きです。PresenterModuleEntryPoint

AsynchProviderパターンに関するこの記事を読んだ後、これらすべてのベストプラクティスを結び付けて、次のアーキテクチャを実現しようとしています。

  • ペインの各タブが独自のフラグメントとしてcodesplit(codesplittedcodesplat?)になるようにコード分割を実装し、ユーザーが初めてクリックした場合にのみダウンロードします
  • 各フラグメント(タブ/ペイン)を表示/レンダリング/実装するために必要なすべてのコードは、きちんと整理されておりAsynchProvider、上記の記事で参照されているパターンに従います。これにより、コンパートメント化でき、他のフラグメントに依存しなくなります

私はすべての要素をまとめ始めていますが、これら2つの概念を実際のコードでどのように結び付けることができるかはまだわかりません。

GWTは神秘的で、強力で、すばらしいものであると感じていますが、実際のコード例がないと学ぶのは非常に困難です。もちろん、これらのワイヤーフレームは「fantastico」または「profile」ペインで実際には複雑さを示していないので、これらは両方とも豊富なUIコンポーネントを備えたかなり洗練された表示領域であることに耐えてふりをしてください。前もって感謝します!

0 投票する
0 に答える
344 参照

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これらのサブクラスは、ビルド時に何らかの方法でビュー/プレゼンターに注入/焼き付けされ、別のテーマまたはスキンでアプリを展開する方法を提供します。ClientBundleCssResourceが正しいです) GWTはGWT POJO にオブジェクト化された CSS スタイルを持っているようです。私のサブクラスは、私のすべての のスタイルにAbstractTheme何らかの形で関連付けられ、定義されます。CssResourceWidget

したがって、提案された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の「もの」に関しては、私が考えていたことは次のとおりです。

質問)!

私が上で言ったように、私はほとんどそこにいると信じています.いくつかのギャップを埋めるのに苦労しています. だから私は尋ねます:

  1. AbstractThemeサブクラスを接続して使用CssResourceClientBundle、アプリが正しいテーマで挿入/構成され、クライアント ブラウザーが正しい CSS ファイル (normal-style.cssまたは) をダウンロードするようにするにはどうすればよいfacebook-style.cssですか?
  2. IPresenter誰かが(クラシック MVP から) AbstractActivity、「表示領域」( AcceptsOneWidget) とPlaces の関係を適切に説明できますか? ここに 1 対 1 対 1 対 1 の関係がありますか、それとも GWT の意図は、たとえば、すべてAbstractActivityの 、またはその他の比率のセットに対して複数の表示領域を持つことですか?
  3. WinPlaceを GWT の History APIに接続するにはどうすればよいですか? ユーザーがWinButton, LoseButton,をクリックした場合、WinButtonそれをブラウザの履歴に保存して、ブラウザの進む/戻るボタンを押して、この使用パターンを何度も再現できるようにするにはどうすればよいでしょうか?
  4. WinButtonクリックされると、イベント バスにいくつかのクリック イベントが配置されます。ImageViewer(a) 内の画像を変更し、(b) この状態の変更を History API に保存することを認識する EventBus にハンドラー/リスナーを接続する場所と方法は?
  5. のアイデアはこの記事AppControllerから得ましたが、残念ながらが実際にどのように見えるかについてのコード スニペットは提供されていません。誰でも ( GWT のパターンに精通している)、これがどのように見えるかについて光を当てることができますか? おそらく、特定のコンポーネントやビューコンポーネントを持たないサブクラスでしょうか?AppControllerAppControllerIPresenterActivity
  6. 一般的に、この種の " amidoinitrite? " スタイルの質問は SO では推奨されないことを私は知っていますが、戦場で使い古された GWT の退役軍人に尋ねなければなりません: 私はここで基地から外れているのでしょうか、それとも多かれ少なかれでしょうか? GWT のベスト プラクティスに沿って進んでいますか? 助言がありますか?

ここでそのような「スーパークエスチョン」をするのは嫌いですが、SO を 6 つの中規模の質問で混乱させて、同じ問題のセットアップを何度も繰り返し続けるよりも、むしろこれを行います。さらに、適切なコード例があれば、おそらく 6 つすべてに一挙に答えることができるので、ここでチャンスをつかみました。

前もって感謝します。

0 投票する
1 に答える
457 参照

java - GWT: Places と ActivityMappers の粒度

私はついにGWTを「取得」し始めています。いつでも、次のようPlaceChangeEventにアプリで起動できます。EventBus

これにより、イベントがバスに追加されます。これにより、登録された はそれをActivityManagerすくい上げ、その内部を調べて、のに関連付けられたActivityMapperを与えます。ActivityPlaceChangeEventPlace

( ActivityMVP/MVC のプレゼンターまたはコントローラー オブジェクトと同様) は、(サーバーへの RPC 呼び出しを介して) 必要なデータを取得し、ビジネス ロジックを実行して、表示する最終的なビュー (通常Compositeは何らかの種類の) を構成します。

ホスト ページに表示領域が 1 つしかない非常に単純な GWT アプリについて話している限り、前述のように「理解」できます。

私がいま気になっているのは、アプリに複数の表示領域 (互いに非同期に更新できる領域) が含まれている場合にどうなるかということです。

だから私は尋ねます:

  1. ActivityMappersはどの程度の粒度である必要がありますか? すべての s をすべてのies にAppActivityMapperマップするアプリ全体が 1 つだけですか、それとも、複数のマッパーがある場合に何らかの階層/分解が必要ですか? (そして、これに対するあなたの答えが「これはアプリケーションのニーズに依存します」という行に沿ったものである場合は、適切なレベルの粒度を実現する要件/ニーズを説明してください!)PlaceActivityActivityMapper
  2. Placeaがアプリ内の URL トークンを表している場合( Placea をブックマーク可能な状態にするため)、複数の表示領域 (D1、D2、D3) を持つより複雑なアプリがあるとどうなりますか。1 つの URL トークン (つまり ) はどのようhttp://myapp.com/#token-for-some-new-placeに D1、D2、および D3 にマップされますか? つまり、すべてのメソッドが呼び出されるアクティビティ ( )ActivityMapper#getActivityのリストを返すことができなければならないということではないでしょうか?List<Activity>start(AcceptsOneWidget, EventBus)

ここで助けてくれてありがとう - コード例は常に揺れ動く.

0 投票する
1 に答える
290 参照

java - 特定のウィジェットで GWT Activity#start を挿入する方法は?

次の親コンテナがあります。

したがって、ユーザーが 内の TextButtons の 1 つをクリックするとbuttonPanelcontentPanelの内容が変更されます。アクティビティ/場所フレームワークを使用して、TextButton の各クリックを履歴に記憶させようとしています。したがって、ユーザーが「赤」、「緑」、「青」のボタンをそれぞれcontentPanelクリックすると、 が 3 回変化し、[戻る]/[進む] ブラウザの履歴ボタンをクリックして、履歴を前後に移動し続けることができます (および "再生」ボタンを何度もクリックするなど)。

次のクラスもあります。

次のように配線することを計画しています。

  • PlaceController.goTo(new RedButtonPlace())最終的にはRedButtonActivity
  • PlaceController.goTo(new GreenButtonPlace())最終的にはGreenButtonActivity
  • など(すべてのボタンには、その色ごとに場所とアクティビティがあります)

私が行き詰まっているのは、クリックハンドラーPlaceController.goTo(new RedButtonPlace())内から呼び出した場合、 updateをどこでどのように指示するのですか? RedButtonRedButtonActivitycontentPanel例えば:

その最後の行がここでの鍵です: panel.setWidget(view). panelそれが であることをどのように確認しParentContainer#contentPanelますか? 前もって感謝します!

編集:1つの回答が示唆するように、コードの更新は次のとおりです。

これが正しい方法である場合、start(AcceptsOneWidget panel, EventBus eventBus)メソッドが呼び出されたときに、引数redButtonActivityManagerの正しい表示を挿入することを知っていると思いますか?panel

0 投票する
1 に答える
702 参照

java - GWTアクティビティとActivityMapperを適切に構成するにはどうすればよいですか?

私は次のクラスを持っています:

そのため、Activitiesフレームワークをある程度理解し始めていますが、それでも非常に新しいため、 Hello、GWTの例から離れようとすると、APIの障害にほぼ瞬時に遭遇します。

私のアプリのメインGWTモジュールでMyWebAppModule、これら3つのオブジェクトをインスタンス化して構成しようとしています。しかし、APIの使用方法がまだわからないため、実装の問題が発生しています。

  1. 明らかに、私は正しく実装DashboardActivityMapperしていないDashboardActivityので、インスタンスをインスタンス化して内部にワイヤリングしようとすると問題が発生しますMyWebAppModule#onModuleLoad。誰かが私がこれを正しく実装するのを手伝ってもらえますか?実用的な例を見つけたら、アクティビティフレームワークの残りの「ドット」を接続できると確信しています。
  2. 私が何かを逃していない限り、ActivityManager manager上記は他のクラスに追加されていないようです。これは正しいです?GWTは、メモリ内で存続していることを確認して、常にリッスンしていることを確認しeventBusますPlaceChangeEventか?または、何かに追加/登録する必要がありますか?

前もって感謝します!

0 投票する
1 に答える
300 参照

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ます。これは、ナビゲーションのさまざまな「レベル」が意味するものです。

  1. アプリケーションレベル(すべてのページ/場所に適用するテンプレート)
  2. ページレベルまたは場所レベル
  3. ディスプレイレベルまたはパネルレベル

質問:

ユーザーが次のすべてを実行するときに、ブックマーク可能なURL(場所)を実現したいと思います。

  • ホームページに移動します(http://www.mywebapp.com
  • いずれかの「ページ」(http://www.mywebapp.com/#calcなど)に移動します
  • http://www.mywebapp.com\#calc\#advancedページ固有のパネルまたは表示構成(など)を引き起こすページ/場所を使用します

いくつのアクティビティと場所を作成しますか?ActivityManagerは何人ですか?ブックマーク可能なUIの「レベル」ごとに、アクティビティ/場所をどの程度細かくする必要があるかを尋ねていると思います。前もって感謝します!

0 投票する
2 に答える
1100 参照

java - 複数のGWTActivityManagerとActivityMappersの使用は何ですか?

ついに、そのメソッドが渡されActivityMapperたサブクラスを解析/検査し、ユーザーに提示する適切なものを返すようにコーディングすることになっていることに気づきました。PlacegetActivity(Place)Activity

Placeだから、これは私に考えさせられました:あなたがあなたのアプリに多くの異なるサブクラスを必要とし、それぞれが異なるブックマーク可能なURL/状態を表すことは理にかなっています。

しかし、なぜアプリに1つ以上が必要になるのでしょうActivityManagerActivity MapperPlaceどちらがどのマップにマッピングされるかについて、GWTによる制限はないようActivityです...

各表示領域が独自のを取得するいくつかの戦略を聞いたことがありますActivityManagerこれは、実際のメリットを提供することなく、プロジェクトをより複雑にするだけのように思えます。前もって感謝します!

0 投票する
1 に答える
941 参照

java - GWT RootPanel に追加するか、デフォルト ビューを設定するだけですか?

次の GWT クラスがあります。

  1. モジュールのロード時に呼び出して表示するだけなのに、なぜ に追加MyDefaultViewする必要があるのですか?RootPanelPlaceHistoryHandler#handleCurrentHistory()MyDefaultView
  2. MyDefaultViewに直接追加すべきではない場合RootPanel、何を追加すればよいですか?

前もって感謝します!

0 投票する
2 に答える
883 参照

java - GWT のアクティビティ/場所はシングルトンまたはプロトタイプのどちらである必要がありますか?

これの違い(パフォーマンスとその他)は何ですか:

と:

つまり、同じ「シングルトン」Placeを何度も再利用し続けるか、要求されるたびに新しいシングルトンをインスタンス化するかの違いは何ですか。

Activityまた、の中から sに対して同じ質問をしActivityMapperます。再度、感謝します!