2011-03-26 66 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> 
} 
相關問題