新しいSeaside-Appを使用するのに問題があります。アプリの目的は、カスケードビューで契約データを表示することです(ツリーのような概念ですが、視覚的にはコンポーネント内のコンポーネントのみです)。トップレベルで契約の名前をクリックすると、いわゆる「セット」が表示されます。これらの契約には含まれています。それらをクリックすると、含まれているいわゆる「パーツ」などが表示されます。
ドラフトバージョンでは、すべての情報をクライアントにロードしてから、以下を使用します。
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が表示され、戻るボタンを押すとセッションに一貫性がなくなり、最悪のシナリオになります)。複数のユーザーにこの動作を許可したいので、状況はさらに複雑になります。もちろん、すべてのユーザーが異なるツリー状態(ツリー内のすべてのノードに対してロードされていない/拡張されている/折りたたまれている)を持っているが、データフィールドに一貫したエントリがあるというセマンティクスがあります。
この種のサーバーセッションの更新を行うためのテンプレートまたは最小限の例はありますか?