专为 Rails 设计的前端模块化框架

“道” 会自动给每一个组件类定义一个对应的 View Helper。例如,Todos::ItemComponent 会有一个对应的 tao_todo_item View Helper 方法。

View Helper 是在 action_view 的 load hook 里动态定义的:

::ActiveSupport.on_load :action_view do
  include ::TaoOnRails::ActionView::Helpers
  load_tao_components ::TaoOnRails::Engine.root
  define_component_helpers
end
  

定义 View Helper 之前,“道” 会先加载 app/components 里面的所有 ruby 文件。然后通过 TaoOnRails::Components::Base.descendants 找到所有的组件类,为每个组件类都定义一个 View Helper:

TaoOnRails::Components::Base.descendants.each do |klass|
  module_eval %Q{
    def #{klass.tag_name.underscore} *args, &block
      #{klass.name}.new(self, *args).render(&block)
    end
  }
end  

可以看到,每一个 View Helper 的内容都以一样的:实例化组件类,然后调用 render 方法。