从Lift中的代码段访问bind-at值

时间:2013-03-15 17:25:29

标签: scala lift

我有一个看起来像这样的模板:

<lift:surround name="default" at="page-content">
  <lift:bind-at name="page-title">Home</lift:bind-at>
  ...
</lift:surround>

默认模板如下所示:

<html>
 <head>
  <title>Title Prefix | </title>
 </head>
 <body>
    <h1><lift:bind name="page-title" /></h1>
    <div id="page-content">
      <lift:bind name="page-content" />
    </div>
 </body>
</html>

我想使用一个代码段将<title>内容替换为一个字符串,该字符串结合了“标题前缀”和<lift:bind-at name="page-title">的值(即:“Home”)。我希望在<h1>

中的<body>内使用相同的值

如何从周围模板中使用的代码段中访问bind-at值?

1 个答案:

答案 0 :(得分:1)

我不相信你可以做你想要做的bind-at指令,或者至少,我找不到办法。您应该能够使用片段来完成类似的事情。

例如,如果您使用SiteMap,则以下内容大致相同。

class TitleSnippet {
  //Store the value in a requestVar
  private var titleVar:String = ""

  def first = {
    //Retrieve the title for the current Loc as defined in the Sitemap
    val locTitle = for (request <- S.request;
      loc <- request.location) yield loc.title

    //Retrieve the text portion of the tag, and append it to the sitemap title. 
    //If no sitemap title exists, just display the text
    "* *" #> { ns => 
      val myTitle = locTitle.map{ t => 
        "%s | %s".format(ns.text, t) 
      } openOr ns.text 
      titleVar = myTitle
      Text(myTitle)
    }
  }

  def title = {
    "* *" #> titleVar
  }
}

然后,在您的模板中,您所要做的只是说:

<title data-lift="TitleSnippet.first">Home</title>

所以,如果我们在站点地图中有这样的页面定义:

Menu("Sub Page 1") / "subpage"

如果一切正常,您应该会看到如下标题:<title>Home | Sub Page 1</title>,如果您在页面的其他位置需要它,那么您只需要:<h1 data-lift="TitleSnippet.title"></h1>

如果您需要访问其他代码段,您还可以将titleVar分解为随播对象并使用RequestVar