当我使用 layout.vm 时如何以速度包含额外的静态文件 (css,js)?

how to include extra static file(css,js) with velocity when I use a layout.vm?

我有一个layout.vm这样的

<html> 
<head>
  <title>$!page_title</title>
  <link href="path/to/css.css">
</head>
<body>
  $screen_content
  <script src="path/to/js.js"></script>
</body>
</html>

这里有一个 user.vm 需要用 layout.vm

渲染
#set($page_title="User") 
<div>hello, user.vm</div>

但是 user.vm 需要更多 js/css 文件 我希望渲染结果会像这样

<html>
<head>
  <title>User</title>
  <link href="path/to/css.css">
  <link href="path/to/user.css">
</head>
<body>
  <div>hello, user.vm</div>
  <script src="path/to/js.js"></script>
  <script src="path/to/user.js"></script>
</body>
</html>

我该怎么办?

user.vm 中声明另一个变量:

#set($isUser = true)

现在编辑 layout.vm。有两种选择。如果您只想使用一个样式表,请像这样切换它们:

<head>
  <title>$!page_title</title>
  #if($isUser)
      <link rel="stylesheet" href="path/to/user.css">
  #else
      <link rel="stylesheet" href="path/to/css.css">
  #end
</head>

或者像这样覆盖样式

<head>
  <title>$!page_title</title>
  <link rel="stylesheet" href="path/to/css.css">
  #if($isUser)<link rel="stylesheet" href="path/to/user.css">#end
</head>

对您的脚本执行相同的操作。如果你把它们放在头部,你甚至可以在一张支票中完成。

注意:您可以通过检查 $!page_title 是否等于 'User' 来做几乎相同的事情,但这不是最好的主意,因为您重载了 var 的含义。因此,我建议使用另一个。

另请注意:此解决方案完全适用于 Velocity。如果您无论如何都在使用支持对象,您应该使用它们(通常)来声明和设置 var(s)。

在 Velocity 1.7 中测试