【发布时间】:2011-03-26 16:54:20
【问题描述】:
有hello scalate的例子,但是学起来太简单了。 我想知道如何整合升力和升力,例如升力彗星、升力形式...
【问题讨论】:
有hello scalate的例子,但是学起来太简单了。 我想知道如何整合升力和升力,例如升力彗星、升力形式...
【问题讨论】:
事实证明,Lift scalate 模块 (2.5) 的当前版本不起作用(在与 sn-ps 和 comet 集成的意义上)。问题是 scalate 模块将 scalate 渲染器作为生成完整响应的东西放入管道中。
因此,您的 scaml 文件将呈现,但它们不支持提升标签。
要获得您真正想要的东西,您应该侵入模板加载器(幸运的是,Lift 允许您这样做)。
我玩了一下这个,并从模块中删除了一些代码。这对我有用(尽管它需要很多东西,例如模板缓存、语言环境支持、开发模式与生产模式,也许还有一些配置参数(例如,在生产模式下,您是否希望每次都缩放以处理骗局,或者只是在初始加载时) ?)。
在 Boot.scala 中:
ScalamdTemplateLoader.init
ScalamdTemplateLoader.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...这会导致 LiftResponse)...通过将其作为外部模板加载器放入,并通过 S.htmlParser 运行它,我们最终得到使用一个模板,该模板被馈送到整个 Lift 子系统...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 sn-p 的预期响应:
class Demo1 {
def currentTime(n : NodeSeq) : NodeSeq = <span class="time">{ new Date().toString }</span>
}
【讨论】:
与任何其他 Lift 模板机制相同。
可以调用片段:
<div class="lift:MySnippet">...</div>
Comet 只是一个 sn-p:
<div class="lift:comet?type=MyCometThing">...</div>
https://groups.google.com/d/topic/liftweb/f_zOj3ZOLQg/discussion
【讨论】:
您会在This pdf 中找到很多内容
【讨论】: