2

新しいSeaside-Appを使用するのに問題があります。アプリの目的は、カスケードビューで契約データを表示することです(ツリーのような概念ですが、視覚的にはコンポーネント内のコンポーネントのみです)。トップレベルで契約の名前をクリックすると、いわゆる「セット」が表示されます。これらの契約には含まれています。それらをクリックすると、含まれているいわゆる「パーツ」などが表示されます。 私たちのGUIを示す画像

ドラフトバージョンでは、すべての情報をクライアントにロードしてから、以下を使用します。

renderContentOn: html
....
html div 
    onClick: (html scriptaculous effect id: tmpid; toggleAppear);
    onClick: (html scriptaculous request callback: [visible:=self visible not]);
with: ...

さまざまなレベルのサブコンポーネントを正常にブレンドインおよびブレンドアウトします。

すべての情報をクライアントにロードするのは、ドラフトバージョン専用でした。次のバージョンでは、ユーザーが拡張したいブランチのみを動的にロードします。Seaside-Bookに従ってこれを行う方法を知っており、次のことを行うと、クライアントが正しく更新されます。

onClick: (html jQuery ajax script: [:s| 
    s << (s jQuery: tmpid) append: ...

ただし、クライアントの状態とサーバーの状態を正しく維持するのに問題があります。ユーザーがhtmlを使用している場合でも、ツリーの一部の状態(ツリー内のすべてのノードでロードされていない/展開されている/折りたたまれている)を維持したい-ツリーの内容を変更するためのフォーム入力(図を参照)。また、接続が一時的に利用できない場合でも状態を維持する必要があります(そうしないと、ユーザーの状態全体とフィールド編集が失われ、404が表示され、戻るボタンを押すとセッションに一貫性がなくなり、最悪のシナリオになります)。複数のユーザーにこの動作を許可したいので、状況はさらに複雑になります。もちろん、すべてのユーザーが異なるツリー状態(ツリー内のすべてのノードに対してロードされていない/拡張されている/折りたたまれている)を持っているが、データフィールドに一貫したエントリがあるというセマンティクスがあります。

この種のサーバーセッションの更新を行うためのテンプレートまたは最小限の例はありますか?

4

1 に答える 1

1

Seaside Ajaxificationに関するブログ投稿とフォローアップFAQを読みましたか?これは確かに、AJAXを既存のSeasideアプリケーションに組み込む最も簡単な方法です(開始方法については、FAQの最後の質問を確認してください)。これは通常のSeasideコールバックメカニズムを使用するため、状態は自動的に同期されます。

サーバーの状態とクライアントのDOMを管理する方法の複雑な例を確認したい場合は、パッケージに付属しScriptaculous-Components、クラスに実装されているツリーレポートウィジェットを参照してくださいSUTreeReport

または、リーフを確認することもできます。Reefは、低レベルのAJAXプロトコルを抽象化し、Seasideのコンポーネントの更新を自動化します。

于 2011-04-11T20:31:20.143 に答える