您的位置:首页 > 运维架构 > 网站架构

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

2015-06-16 15:37 555 查看
复制**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标签属性

属性表值可用 A=B表示

class值可以简写为 .classType

如果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>...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐