2

*.tplmy-snap-app/snaplets/heist/templates( main.tpl, page1.tpl, page2.tpl, ) 中有模板 ( page3.tpl)。这是我的Main.hs

import Snap.Http.Server
import Snap.Core
import Snap.Snaplet
import Snap.Snaplet.Heist
import Snap.Util.FileServe
import Snap.Util.GZip
import Heist.Interpreted
import Heist

--.......

data App = App { _heist :: Snaplet (Heist App) }
makeLenses ''App

instance HasHeist App where 
  heistLens = subSnaplet heist

我怎样才能:

a) 让所有模板在我的网络应用程序中可用?意思是,我希望能够访问page1.tpl, page2.tpl, page3.tplon localhost://page1, localhost://page2, localhost://page3. 我是否必须每个页面添加一条路线,或者我可以添加一条路线以使它们一次全部访问?

2)main.tpl是一个主模板(布局)。如何page[123]main.tpl作主布局模板?

4

1 回答 1

2

Heist snaplet 的功能serveHeistserveDirectory. 这将为模板/路由中的所有模板提供服务。黑线鳕有一些更多的细节,例如隐藏某些自己没有意义的模板。

为了将不同的模板组合在一起,可以将模板想象成函数——您可以将它们应用于其他模板,结果本身就是一个模板。这些事情都发生在 Heist 本身,而不是瞬间发生。

<apply>标签执行功能应用。参数是 内部的内容<apply>,例如 in page1.tpl

<apply>
  <h1>I'm a function parameter</h1>
</apply>

应用的函数是main.tpl,参数是<apply-content>

<html><head></head>
  <body>
    <h1>Main template.</h1>
    <apply-content/>
  </body>
</html>

使用<apply><apply-content>执行功能应用程序并计算整个页面,这将在/page1路线上可用。

Heist Tutorial中有更多解释。我想知道函数应用类比是否有助于记住更多的抢劫 API。

于 2016-02-28T20:43:57.493 回答