技術的な問題というよりも、おそらく設計上の問題であると思われる問題があります。
これらのクラスがあると仮定します:
class A {
def someInfo
static hasMany = [b: B]
}
class B {
A a
def info
def moreInfo
...
def aLotMoreInfo
}
ここで、ユーザーが A の b を編集し、新しい b を追加できるページにいるとします。ただし、ユーザーは変更を A に保存する必要があります。そうしないと、すべてが破棄されます。
私の現在のアプローチは、追加の b を作成し、AJAX を介してそれらをレンダリングし、それらの ID をセッション変数に保存して、「保存されていない」b を削除できるようにすることです。
これは非常にうまく機能しますが、一般的なユース ケースの 1 つとして、ユーザーがページを更新する場合があります。
window.onunload-event を使用して、保存していない変更が失われることをユーザーに通知し、AJAX 呼び出しで削除関数を呼び出してセッション変数から b を削除します。残念ながら、b を削除する前に、A コントローラーのインデックス関数が呼び出されます。これは、「保存されていない」b が表示され、その後すぐに削除されることを意味します。これにより、更新を行うか、何らかの形で b が削除されるのを待つ必要があります。
とにかく私がそれを達成しようとする方法が間違っているかもしれません.
問題は、保存関数で作成するためにすべての情報を隠しフィールドに保存する必要なく、破棄される可能性のある新しいオブジェクトを監視するにはどうすればよいかということです。
アップデート:
前にも言ったはずですが、それほど重要ではないと思いました。
B は、次の例のような多くのクラスによって拡張される抽象クラスです。
class childOfB extends B {
def usefulExtraInfo
}
class anotherChildOfB extends B {
def anotherUsefulExtraInfo
}
それに加えて、B には、A の b のセット内の位置を表す整数フィールドがあります。そのために SortedSet を使用できることはわかっていますが、特定の理由により、別のフィールドにする必要があります。これについて言及するのは、ビューがそれぞれを、ドラッグ アンド ドロップで並べ替えることができる並べ替え可能なリストの要素としてレンダリングするためです。
ユースケース: ユーザーはいくつかの childOfB、anotherChildOfB を追加し、必要に応じて並べ替えます。ビューにタイプを保存せずにそれらのタイプを追跡するにはどうすればよいでしょうか。これも悪い習慣だと思いますか?
よろしく