モデルはクライアント上で動作しますが、クライアントとサーバー間にはレイテンシーが存在しているため、Volt では、モデルがサーバーに同期されているかを確認するためのいくつかの「状態 (state)」メソッドを用意しています。バッファーから保存した場合、.save! が返す Promise はデータがサーバー側に保存されてから解決されます。したがって、以下の状態メソッドは主に、ユーザーに対して状況を知らせるために使います。
すべてのストアモデル (もしくはバッファ) に対して、.saved_state を実行することができます。その結果は以下です:
| 状態 | 詳細 |
|---|---|
| not_saved | モデルはサーバーに保存されていません |
| saving | モデルは保存処理中です |
| saved | モデルはサーバーに保存され、クライアントのデータは最新の状態です |
| 状態 | 詳細 |
|---|---|
| not_loaded | ArrayModel は読み込まれておらず、読み込むためにモデルに依存しているものもありません (これは Volt の内部状態なので外から見ることはありません) |
| loading | ArrayModel はデータを読み込み中です |
| loaded | データは読み込まれ、サーバーと同期しています |
| dirty | データは読み込まれていますが、サーバーと同期されていません。この状態は、バインディングがデータをリアクティブにリッスンしていない場合や、データが何も発生させない場合に発生します |
モデルがロードされているかどうかは、以下のように確認できます。
{{ if todo.load_state == :loading }}
<p>Loading Todo...</p>
{{ elsif todo.load_state == :loaded }}
<p>{{ todo.label }}</p>
{{ end }}
また、Volt は読み込み状態が:loaded であるかをチェックするための便利なメソッドを提供しています。
{{ if todo.loaded? }}
<p>{{ todo.label }}</p>
{{ end }}
コントローラーで self.model = を Promise と設定した場合、ビューは Promise が解決されるまではレンダリングされないことを覚えておいてください。(詳細は遅延レンダリング for more info)を参照してください。