Вы можете загрузить виджет с параметрами в файле Гамлет в 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