Haskell之Yesod开发–简单网站开发(一)

复制**Book**P57中间的代码到新的模块中,不要忘记增加

module XXX where

需要增加以下两个库到.cabal

http-types
blaze-builder
$ renderHtml $[hamlet|...|] render

我认为执行顺序是这样
hamlet识别到@?,调用render函数,并将@?{...}中的值传递给render函数,这个{..}被解析为两项,first恰好是一个SomePage,第二项是一个[(Text,Text)],这一点从

[(``page``),pack $ ...]上可以看出来

如果我们需要改进render函数,需要注意其参数形式必须是render::XXX->[(Text,Text)]->YYY,其中XXX可自行定义, YYY是由调用函数(这里是renderHtml函数)决定的,[(Text,Text)]是由@?{..}的第二项决定

了解了上面这点,那这里的render就比较好理解了,我们来实际看一下

"/home" `append` decodeUtf8 (toByteString $ renderQueryText True (map (second Just) (SomePage,("page",pack $ show $ 3-1)))
=> "/home" `append` decodeUtf8 (toByteString $ renderQueryText True Some("page",Just(pack 2))
=> "/home" `append` decodeUtf8("?page=2")
=> "/home?page=2"

关于上面这一段解析,读者可尝试去掉render函数中的部分代码来自行检查

HTML标签属性
  1. 属性表值可用 A=B表示
  2. class值可以简写为 .classType
  3. 如果id不用计算,可以直接用#idvalue表示,如果需要计算,则仍然需要使用id=#{…}来设置

    =两侧的文本,如果没有替换值,则左侧的成为key,右侧的用双引号包裹后作为value

条件标签
$if isAdmin
    XXX
$elseif isLoggin
    YYY
$else
    ZZZ
maybe判断
$maybe name <- maybename
    Something
$nothing
    Nothing

别忘记了maybe判断中可以直接使用模式匹配

$maybe Person firstname lastname <- maybename
    Something
for标签
<ul>
    $for person <- people
     <li>Something
case标签
$case foo
    $of Left bar
        Something
    $of Right baz
        Something
with标签(不是很理解,留待以后解决)
doctype

为代码直接加上Html头

$doctype 5
<html>
    <head>...
    <body>...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值