1

我尝试将会话值放在一个变量中以在我的 .hamlet 中显示它,但它不支持!

 getEtatR :: Handler Html
 getEtatR = do
     mSessionValue <- lookupSession "myKey"
     let myValue = mSessionValue :: Maybe Text
     defaultLayout $ do
         aDomId <- newIdent
         setTitle "mon titre"
         $(widgetFile "etatWidget")

我需要 #{myValue} 将其放入我的 etat.hamlet

4

2 回答 2

1

问题在于 myValue 的类型,即 Maybe Text。为了让一个变量出现在模板中,它必须是 Text.Blaze.ToMarkup.... 的一个实例。所以 Text、String 或 Int 都可以工作,但“Maybe a”不行。

有很多方法可以将“Maybe Text”转换为 ToMarkup。如果您确定 Maybe 不会是“Nothing”,只需使用 fromJust (从 Data.Maybe 导入)去除可能...。但请注意,如果它确实作为 Nothing 出现,程序将崩溃。同样,您可以使用 case 语句来填写 Nothing 案例,如下所示

myVariable = case mSessionValue of
                         Just x -> x
                         Nothing -> "<No session value>"

您还可以通过使用 show 将 mSessionValue 转换为字符串来进行快速检查。

以下对我有用....

getEtatR :: Handler Html
getEtatR = do
     mSessionValue <- lookupSession "myKey"
     let myValue = show mSessionValue
     defaultLayout $ do
         aDomId <- newIdent
         setTitle "mon titre"
         $(widgetFile "etatWidget")

使用 etatWidget.hamlet

<h1>#{myValue}
于 2013-11-14T19:03:02.160 回答
0

如果您只想显示值并将其从 Maybe 中取出,您可以直接在 hamlet 内部执行此操作

$maybe val <- mSessionValue
   <p>#{val}
$nothing
    <p>No Value Set 
于 2013-11-15T04:59:22.010 回答