这里有hello scalate示例,但它太简单了,很难学习。我想知道如何整体提升和升级,例如,提升彗星,提升形式…
发布于 2013-02-10 14:29:58
事实证明,Lift scalate模块(2.5)的当前版本不起作用(在与代码片段和comet集成的意义上)。问题是,scalate模块将scalate渲染器作为生成完整响应的东西放入管道中。
因此,您的scaml文件将呈现,但它们将不支持lift标记。
要获得你真正想要的东西,你应该黑进模板加载器(幸运的是,Lift允许你这样做)。
我对此进行了一点尝试,并从模块中摘取了一些代码。这对我来说很有效(尽管它需要很多东西,比如模板缓存、区域设置支持、开发模式与生产模式,也许还有一些配置参数(例如,在生产模式下,你想让scalate每次都处理scaml,还是只在初始加载时处理?)。
在Boot.scala中:
ScalamdTemplateLoader.initScalamdTemplateLoader.scala在哪里
... 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的模板源,而不是响应源。
当我输入这样的模板时:
%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片段中得到了预期的响应:
class Demo1 {
def currentTime(n : NodeSeq) : NodeSeq = <span class="time">{ new Date().toString }</span>
}发布于 2011-03-28 12:18:02
与任何其他Lift模板机制相同。
可以调用以下代码片段:
<div class="lift:MySnippet">...</div>而Comet只是一个片段:
<div class="lift:comet?type=MyCometThing">...</div>https://groups.google.com/d/topic/liftweb/f_zOj3ZOLQg/discussion
发布于 2011-10-19 20:50:26
你会在This pdf中找到很多这样的文件
https://stackoverflow.com/questions/5443779
复制相似问题