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
が実行されます。これによって、レンダリングの前にデータを待つことをシンプルに行えるようになっています。