Vanilla 的视图引擎

为去除模板运行时模板解析带来的不必要开销,从 vanilla-0.1.0.rc7 起 Vanilla 开始支持 OpenResty 官方的 Lemplate 模板引擎,下面将简要介绍 Vanilla 中 Lemplate 的用法,以及 Vanilla View 接口介绍

Vanilla 的视图渲染

Vanilla 在 vanilla.v.dispatcher 中导入了默认的模板引擎(local View = LoadV 'vanilla.v.views.rtpl'),但是可以在 Bootstrap 中实现 initView 来修改所使用的视图引擎。
而 Vanilla 的模板渲染,只需要在相应的 Action 中获取当前视图实例,注入数据,展示即可。下面就以 Lemplate 模板引擎为例,展示相关用法

首先在 Bootstrap 中实现 initView 方法,修改项目所使用的视图引擎

  1. -- application/bootstrap.lua
  2. function Bootstrap:initView()
  3. local view = LoadV('vanilla.v.views.lemplate'):new(self.dispatcher.application.config.view)
  4. self.dispatcher:setView(view)
  5. end
  6. -- boot_list 中打开 Bootstrap.initView 方法调用
  7. function Bootstrap:boot_list()
  8. return {
  9. -- Bootstrap.initWaf,
  10. -- Bootstrap.initErrorHandle,
  11. -- Bootstrap.initRoute,
  12. Bootstrap.initView,
  13. -- Bootstrap.initPlugin,
  14. }
  15. end

运行 ./va-{app_name}-service ltpl 命令调用 Lemplate 编译你的 TT2 模板

下面是 TT2 模板示意

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>[% title %]</title>
  6. </head>
  7. <body>
  8. <div>
  9. [% FOREACH userinfo IN userlists %]
  10. <p>
  11. <h6>姓名:[% userinfo.name %] / 地址:[% userinfo.addr %]</h6>
  12. </p>
  13. [% END %]
  14. </div>
  15. </body>
  16. </html>

在 Vanilla Action 中调用编译好的模板

  1. function IndexController:index()
  2. local view = self:getView()
  3. local users = {
  4. {name='idevz', addr='yunnan'},
  5. {name='vanilla', addr='beijing'},
  6. }
  7. return view:assign({userlists=users, title = 'Vanilla-Lemplate'})
  8. end

注:

  • local view = self:getView() 获取当前视图实例
  • view:assign({userlists=users, title = 'Vanilla-Lemplate'}) 将数据注入视图

注:以上为 Lemplate 所使用的 TT2 模板实例,关于 Lemplate 的详细使用,可参考其详细文档