【发布时间】:2017-02-22 17:09:18
【问题描述】:
如何将特定的 purescript-halogen 组件渲染到
标签中?以下为 Halogen 1.0.0 编写的示例将样式表和段落呈现到 HTML 正文中:
module Main where
import Prelude
import Control.Monad.Eff (Eff)
import Data.Maybe (Maybe(Nothing))
import CSS as C
import Halogen as H
import Halogen.Aff as HA
import Halogen.HTML as HH
import Halogen.HTML.CSS as HS
import Halogen.Query.HalogenM as HQ
import Halogen.VDom.Driver as HV
styles :: forall p i. HH.HTML p i
styles = HS.stylesheet $
C.select C.body $ C.margin C.nil C.nil C.nil C.nil
content :: forall p i. HH.HTML p i
content = HH.p_ [ HH.text "Test" ]
main :: Eff (HA.HalogenEffects ()) Unit
main = HA.runHalogenAff $ HA.awaitBody >>= HV.runUI ui unit
where
ui = H.component { initialState : const unit
, render : const render
, eval : const $ HQ.halt "no query"
, receiver : const Nothing
}
render = HH.div_ [ styles, content ]
DOM 生成如下:
<html>
<head>
<title>Test</title>
<script async="" type="text/javascript" src="main.js"></script>
</head>
<body>
<div>
<style type="text/css">
body { margin: 0 0 0 0 }
</style>
<p>
Test
</p>
</div>
</body>
</html>
此示例有效,但根据specification,样式元素仅允许“在需要元数据内容的地方”,即
元素。所以我想在那里渲染样式表。我该如何做到这一点?【问题讨论】:
-
如果样式表完全是静态的,为什么还要用 Halogen 渲染呢?如果需要这种灵活性,可以在特定元素上呈现样式属性。但总的来说这个问题仍然很有趣......我正在考虑
。 -
在 Purescript 中呈现静态样式表具有以下优点: 您可以使用 PureScript 的全部功能来组装样式表,并且不需要像 Sass 或 Less 之类的其他 CSS 预处理器。此外,您可以将代码模块化,以便将 Halogen 组件与其样式存储在一起。如果您需要媒体查询或
:hover之类的伪类,则不能使用样式属性。
标签: purescript halogen