smartGWT でどのパスを選択するかについて、基本的な質問がいくつかあります。私はすでにしばらくの間それをいじっていて、これまでのところウィジェットに慣れてきました。問題はありますが (特にブラウザに)、誰にも問題はありません...
標準の gwt-rpc-async スキームをトリガーするローカル記述子/オブジェクト キャッシュとリゾルバーを備えたカスタム オブジェクト取得メカニズムがあります。データセットではなく、ID とプロパティを使用してオブジェクトを交換しています。それらは、クライアントに既に存在するツリー/ネットワークとして表されます。そのため、グラフ/ツリーを探索するたびに、新しいオブジェクトが読み込まれます。または、既にキャッシュに存在する場合は、再利用されます (これにより、エンティティの再帰が回避されます)。
ツリーとリストを表示するために、データソースは使用しませんでした。独自のTreeオブジェクトを手動で作成し、何かがロードされたときにノード/子を更新し、プロパティを設定することができました。これまでのところ、これは動的に機能します。私はsetData()を使用してTreeをTreeGridに設定しています。ツリーのほとんどの変更 (追加、追加リスト、削除など) はビューに即座に反映されます。
しかし、ここで問題が始まります。私は、モデル (ツリー) がデータ/オブジェクト (プロパティの変更、ノードの追加/削除) で何かを行い、ビュー (ツリーグリッド) に通知するモデル駆動型のアプローチが好きです。モデルだけが、いつ、何をデータで処理するかを知っています。しかし、含まれているメソッドはほとんどありません。すべてが内部にあります (JavaScript)。独自の EventHandler を作成し、TreeGrid に接続できます (これには、refreshRow()などのメソッドがあります)。しかし、未知の影響、メモリリークなどのため、smartGWTでこれを行うのは不安です。
私には、ビューとモデルが smartGWT で結合されすぎているようです。さまざまな種類のビュー (TreeGrid、ListGrid、さらにはカスタム キャンバス) で再利用できるオブジェクト グラフのモデルを使用していますが、どのデータが表示されるかわかりません。リストの場合はルート ノードの子を使用するだけで、ツリーの場合はモデル全体を使用します。
smartGWT のほとんどは、実際には DataSource 用に構築されているようです。なぜそれを使わなかったのですか? オブジェクト グラフは異種です。予測不可能な。同種のもののコレクションがあるかもしれませんが、そうではありません。個別のデータベースの結果セットと比較することはできません。オブジェクト フィールドは、記述子 (クラス) によってクライアント上で既に分析されています。さらに、私はインターフェイスを使用します。オブジェクトのプロパティには、直接アクセスするか、インターフェイスを解決することによってアクセスできます。つまり、「ITimeObject.time」は「TelephoneCall.starTime」の実装プロパティに解決されます。そのような DataSource を作成する方法がわかりません... ?
さらに悪いことに、私は役割と許可に基づいてオブジェクトにアクセスできます。つまり、特定のユーザーにはすべてのフィールドが表示され、別のユーザーには部分のみが表示される場合があります。
ビュー用に(動的に)構築する必要があるリゾルバーとモデルを作成したら、呼び出し/ビューごとに「マッピング」を作成するのではなく、コードのどこでも使用したいと思います。すべてがオンザフライで構築されます。ユーザー インターフェイスでは、具象型やオブジェクトなどについて何も知りません。説明はすべてバックエンドから取得されます。
わかりました。ここで質問です:)ここで多くのことを明確にする必要がありました。ここからどのパスを選択するかのヒントが必要です。
続ける。独自のモデル/ビューを使用します。
1a. フィルタリング、検索、編集/検証など、データソースで利用できるすべての機能を実装できますか?
1b. モデル -> ビュー通知を手動で実装するにはどうすればよいですか? ビューを閉じるとき、新しいモデルを設定するとき、キャンバスを破棄するときなど、副作用のない nodeUpdated(TreeNode node, boolean childrenToo) のようなもの
1c。フォーム、エディターなど、どこにでもデータソースがあります。自分のモデルをそれらにプラグインする方法はありますか?
ちょっとまって。すべて DataSource で可能です。
2a. 次に、取得したものと表示しようとしているものに適応し、敏感なデータソースをオンザフライで (既存のモデルを使用して) クライアントに作成するにはどうすればよいですか。ビューの説明 (フィールド) と「受け入れられたソース」があれば、オブジェクト グラフを調べることができます。
2b. 「親ID」スキームを回避することは可能ですか? つまり、既知のオブジェクトから始めて、むしろトップダウンになります。また、リストに同じオブジェクトを複数回含めることも、異なる親の子にすることもできます。
長い説明で申し訳ありません。atm を投稿する具体的なコードの質問はありません。まだ編集などを行っていないため、表示するだけです。Tree/TreeGrid 通信の制限に遭遇したため、ここから先に進むべきかどうかを分析したかったのです。
あなたの考えをありがとう:)