Volt Introduction and Docs

遅延レンダリング

self.model = ... が呼び出され、モデルが Promise にセットされると、コントローラーはレンダリングされる前に Promise が解決されるのを待ちます。Volt::ModelControllers には loaded? というメソッドがあり、レンダリングされる際にビューからそれがチェックされます。レンダリングする前に、ビューは loaded? が true を返すまで待ちます。これによって、モデルがロードされたかどうかをチェックする必要がなくなり便利です。モデルを Promise にアサインしたときには、準備ができているかどうかについてビューがレンダリングを開始する前に把握することができます。

例えば、以下のようにしたとします。

module Main
  class MainController < Volt::ModelController
    def index
      self.model = store.posts.first
    end
  end
end

上記の例で、ビューバインディングが (もしくはタグ) が index.html のレンダリングを開始したとき、コントローラーのインスタンスを生成し、それから #index を呼び出します。次に、ビューバインディングは、index.html ファイルをレンダリングする前に、Promise が解決されるのを待ちます。その後、#index_ready が実行されます。これによって、レンダリングの前にデータを待つことをシンプルに行えるようになっています。