2011-03-26 62 views

回答

0

与任何其他升降机模板机制相同的方式。

片段可以调用:

<div class="lift:MySnippet">...</div> 

和彗星仅仅是一个片段:

<div class="lift:comet?type=MyCometThing">...</div> 

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

+0

原来Scalate的模块,因为它目前存在的,如行为一个派遣例程,产生一个回应,并绕过所有的真正的提升善良...看到我的答案。 – 2013-02-10 06:38:47

0

你会发现他们很多在This PDF

+0

liftweb-master.pdf does not have any related to scalate – Rajesh 2014-01-29 07:27:51

1

事实当然,Lift scalate模块(2.5)的当前版本不会(在与片段和彗星整合的意义上)。问题在于,scalate模块将scalate渲染器放入管道中,作为产生完整响应的东西。

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

为了得到你想要的,你应该进入模板加载器(幸运的是,允许你这样做)。

我玩了这一点,并从模块中剔除了一些代码。这对我很有用(虽然它需要很多东西,比如缓存模板,区域设置支持,开发模式与生产模式,可能还有一些配置参数(例如,在生产模式下是否需要每次处理scaml或初始化时?)

在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)...作为一个e xternal模板加载器,并通过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的预期的响应片段:

class Demo1 { 
    def currentTime(n : NodeSeq) : NodeSeq = <span class="time">{ new Date().toString }</span> 
} 
相关问题