簡體   English   中英

一個帶有反射frp的svg元素

[英]a single svg element with reflex frp

我正在嘗試在reflex FRP中編寫單個SVG元素

import Reflex.Dom
import qualified Data.Map as Map

main = mainWidget $ myDiv

myDiv = el "svg" $ do
  elAttr "circle"  $ Map.fromList [ ("cx" , "50") , ("cy", "50"), ("r" , "40"), ("stroke" , "green"), ("fill",  "yellow" )]

這不編譯。 希望Data.Map是正確的。 我從quickref知道類型簽名是:

elAttr     :: String ->          Map String String  -> m a -> m a

稍微好奇monad mmainWidget相關聯,但主要是開始工作。

這是使用反射附帶的沙箱編譯的。

這里有兩件事需要解決。

首先,你想要返回一些東西,通常基本的return ()將允許你編譯。

其次,elAttr采用2種輸入類型,所以在“圓圈”之后你想把第二個參數放在括號中而不是$

這就是它的樣子:

import Reflex.Dom
import qualified Data.Map as Map

main = mainWidget $ myDiv

myDiv = el "svg" $ do
  elAttr "circle"  (Map.fromList [ ("cx" , "50") , ("cy", "50"), ("r" , "40"), ("stroke" , "green"), ("fill",  "yellow" )]) $ return ()

編譯后,您應該能夠在瀏覽器的元素檢查器中看到這一點。

<html>
  <head>
    <script language="javascript" src="rts.js"></script>
    <script language="javascript" src="lib.js"></script>
    <script language="javascript" src="out.js"></script>
  </head>
  <body>
    <svg>
     <circle cx="50" cy="50" fill="yellow" r="40" stroke="green"></circle>
    </svg>
  </body>
</html>

如果你想看到它出現在瀏覽器中,請確保在你的svg元素中使用elDynAttrNS'定義此屬性xmlns="http://www.w3.org/20000/svg"

main = mainWidget $ myDiv

myDiv = do
  let attrs = constDyn $ fromList
               [ ("width" , "500")
               , ("height" , "250")
               ]
  let cAttrs = constDyn $ fromList
               [ ("cx", "50")
               , ("cy", "50")
               , ("r", "40")
               , ("stroke", "green")
               , ("stroke-width", "3")
               , ("fill",  "yellow" )
               ]

  s <- elSvg "svg" attrs (elSvg "circle" cAttrs (return ()))
  return ()

elSvg tag a1 a2 = do
  elDynAttrNS' ns tag a1 a2
  return ()

ns :: Maybe String
ns = Just "http://www.w3.org/2000/svg"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM