0

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

<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>我想继续在in 中使用相同的值<body>

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

4

1 回答 1

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.

于 2013-03-18T17:01:22.720 回答