首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有lift + scalate的完整例子?

有没有lift + scalate的完整例子?
EN

Stack Overflow用户
提问于 2011-03-27 00:54:21
回答 3查看 931关注 0票数 2

这里有hello scalate示例,但它太简单了,很难学习。我想知道如何整体提升和升级,例如,提升彗星,提升形式…

EN

回答 3

Stack Overflow用户

发布于 2013-02-10 14:29:58

事实证明,Lift scalate模块(2.5)的当前版本不起作用(在与代码片段和comet集成的意义上)。问题是,scalate模块将scalate渲染器作为生成完整响应的东西放入管道中。

因此,您的scaml文件将呈现,但它们将不支持lift标记。

要获得你真正想要的东西,你应该黑进模板加载器(幸运的是,Lift允许你这样做)。

我对此进行了一点尝试,并从模块中摘取了一些代码。这对我来说很有效(尽管它需要很多东西,比如模板缓存、区域设置支持、开发模式与生产模式,也许还有一些配置参数(例如,在生产模式下,你想让scalate每次都处理scaml,还是只在初始加载时处理?)。

在Boot.scala中:

代码语言:javascript
复制
ScalamdTemplateLoader.init

ScalamdTemplateLoader.scala在哪里

代码语言:javascript
复制
... other imports ...
import net.liftmodules.scalate.LiftTemplateEngine

object ScalamdTemplateLoader extends Loggable {
  val renderer = new LiftTemplateEngine
  def init = {
    LiftRules.externalTemplateResolver.default.set(scalateTemplateLoader _)
  }

  protected def createUri(path: List[String], ext: String): String = path.mkString("/") +
    (if (ext.length > 0) "." + ext else "")

  protected def canLoad(v: String): Boolean = {
    renderer.canLoad(v)
  }

  def canRender(path: List[String], ext: String): Boolean = {
    if (ext == "") {
      canLoad(createUri(path, "scaml")) || canLoad(createUri(path, "ssp"))
    } else {
      val uri = createUri(path, ext)
      (uri.endsWith(".ssp") || uri.endsWith(".scaml")) && canLoad(uri)
    }
  }

  def scalateTemplateLoader: PartialFunction[(Locale, List[String]), Box[NodeSeq]] = {
    case (l: Locale, path: List[String]) if (canRender(path, "")) => {
      val uri: String = List("scaml", "ssp").map(createUri(path, _)).find(renderer.canLoad(_)).get
      val rawTemplate = renderer.layout(uri)
      val is = new ByteArrayInputStream(rawTemplate.getBytes("UTF-8"));
      val parserFunction: InputStream => Box[NodeSeq] = S.htmlProperties.htmlParser
      parserFunction(is)
    }
  }
}

这些代码的大部分是直接从模块中提取的(参见ScalateView...which results in a LiftResponse)...by将其作为外部模板加载器放入,并通过S.htmlParser运行,我们最终得到一个输入到整个Lift中的模板subsystems...scalate用作lift的模板源,而不是响应源。

当我输入这样的模板时:

代码语言:javascript
复制
%html{:xmlns => "http://www.w3.org/1999/xhtml", "xml:lang" => "en", :lang => "en"}
  %body
    %p Hi there
    %div.crap This is some crap
    %div(class="lift:Demo1.currentTime")
      %p I am having fun at 
      %span.time

我从Demo1片段中得到了预期的响应:

代码语言:javascript
复制
class Demo1 {
  def currentTime(n : NodeSeq) : NodeSeq = <span class="time">{ new Date().toString }</span>
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-28 12:18:02

与任何其他Lift模板机制相同。

可以调用以下代码片段:

代码语言:javascript
复制
<div class="lift:MySnippet">...</div>

而Comet只是一个片段:

代码语言:javascript
复制
<div class="lift:comet?type=MyCometThing">...</div>

https://groups.google.com/d/topic/liftweb/f_zOj3ZOLQg/discussion

票数 0
EN

Stack Overflow用户

发布于 2011-10-19 20:50:26

你会在This pdf中找到很多这样的文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5443779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档