Вы можете загрузить виджет с параметрами в файле Гамлет в Yesod?

Каков наилучший способ загрузки HTML из виджета, если ваш цикл через набор данных?

т.е. в файле деревушки

$forall Entity id val <- collection
    ^{myWidget (p1 val) (p2 val)}

1 ответ

Обратите внимание, что шаблон Гамлета может включать только шаблон Гамлета. Если вы хотите встроить виджет, используйте whamlet,

Также да - вы можете передавать параметры в виджет. Пример сценария стека, демонстрирующий концепцию:

#!/usr/bin/env stack
{- stack
     --resolver lts-9.0
     --install-ghc
     runghc
     --package yesod-core
     --package yesod
     --package shakespeare
-}

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes       #-}
{-# LANGUAGE TemplateHaskell   #-}
{-# LANGUAGE TypeFamilies      #-}
import           Yesod

data App = App
mkYesod "App" [parseRoutes|
/ HomeR GET
|]

instance Yesod App

data Person = Person { id :: Int, name :: String, email :: String } deriving (Show, Eq, Ord)

collections = [Person 1 "Sibi" "sibi@domain.com", Person 2 "Michael" "michael@domain.com"]


whamlet1 :: Widget
whamlet1 = [whamlet| <p>hello
                   $forall Person _ pname pemail <- collections
                     ^{whamlet2 pname pemail}
           |]

whamlet2 :: String -> String -> Widget
whamlet2 pname pemail = [whamlet| <h1> #{pname} #{pemail} |]

getHomeR = defaultLayout $ do
    setTitle "My Page Title"
    toWidget [lucius| h1 { color: green; } |]
    whamlet1

main = warp 3000 App

Глава о виджетах в книге Йесод объясняет их более глубоко.

Другие вопросы по тегам