画面から画面へ

一覧と明細が別々の文書になっている画面です。行を押すと明細のページに移り、「一覧へ戻る」で戻ります。

何が起きるか

一覧で絞り込んで、行を押すと、明細のページに移ります。明細にはその受注が出ます。

明細で F5 を押すと、一覧に戻されます。渡された値は一度読むと消えるので、明細には出すものがありません。それは画面を直接開いたのと同じ状態です。

「一覧へ戻る」を押すと、一覧に戻ります。絞り込みも、スクロール位置も、出たときのままです。

なぜストレージを使うのか

一つのページの中で表示を切り替えるだけなら、選ばれた受注番号はアクタが持てば済みます。受注管理の画面がそうしています。

別の文書に移ると話が変わります。明細のアクタが動き出すころには、一覧のアクタは消えています。 渡すものは、アクタの外に置くしかありません。

渡すのは鍵と戻り先

一覧は、行が押されたときに二つ書きます。明細が要る受注番号と、戻ってきたときに使う情報です。

Once at: 'detail' putJson: (Json object: {
  #code -> (Json str: code).
  #back -> (Json object: {
    #filter -> (Json str: filter).
    #top    -> (Json int: top) }) }).
Loc assign: 'detail.html'.

書いてから飛びます。 順番が逆だと、書くはずのアクタがもういません。

明細は受注番号だけを受け取り、サーバから取り直します。一覧が持っていた一件をそのまま映すと、一覧を開いてから時間が経っている場合に古い金額を出すことになります。

読めば消える

Once take: は読み取りと削除を一つにしてあります。外から「読むだけ」はできません。

だから明細で再読み込みすると、渡された値がありません。それは画面を直接開いたのと同じ状態なので、一覧へ戻します。読んだら消えるストレージが、そのまま画面の仕様になります。

戻るときは、預かっていた戻り先を書き戻します。一覧はそれを一度だけ読んで、絞り込みとスクロール位置を元に戻します。

確かめ方

ページ遷移も、スクロール位置の復元も、本物のブラウザでなければ確かめられません。ブラウザを画面なしで動かして、行を押し、明細に出た番号を見て、再読み込みで一覧に戻ることを見て、戻ったときの絞り込みとスクロール位置を見ています。