我想我前段時間曾問過類似的問題,但由於API不穩定而沒有回答。所以我等待0.13通過。我不確定提出類似的問題是否正確...?捕捉:編譯拼接代碼示例
編譯拼接世界中解釋runChildrenWith(Text)
和mapSplices
的替代方案是什麼? (這個組合似乎是最常見的) 如果可能,我會非常感激一些代碼示例。
如果我理解正確,我們將所有應用程序拼接在一起,然後將它們添加到heistInit
。任何人都可以展示如何做到這一點?
拼接綁定標籤在整個應用程序中是否必須是唯一的?
是否有完整的快照項目utilising
新的API和編譯拼接,以便我可以閱讀和了解學習?
謝謝。
- 更新 -
大下面的答案。但不幸的是,有些部件(帶鏡頭的部件)讓我更加困惑。 如果我理解正確的話,這是簡單的方式拼接的字符串:
mySplice = "testSplice" ## testSplice
where testSplice = return $ C.yieldRuntimeText $ do
return "text to be spliced"
如果我需要運行拼接字符串幾次,在5個原糖說我會做這樣的:
mySplices = C.manyWithSplices C.runChildren mySplice
這是正確的嗎?
我收到一堆錯誤,試圖在heist配置中添加接頭。
addConfig h $ mempty
{
hcCompiledSplices = "mySplice" ## mySplice -- or mySplices
}
我哪裏錯了?對不起,速度很慢。
我真正需要的所有東西(只是現在,所以我可以理解)是拼接並顯示從數據庫接收的簡單字符串。
- UPDATE 2 -
得益於extremle樂於助人的丹尼爾答案我終於可以得到的東西的工作。
到目前爲止,我得到了兩種代碼工作方式。
第一個,由於丹尼爾
stringSplice :: Monad n => C.Splice n
stringSplice = C.manyWithSplices C.runChildren splicefuncs (return ["aa","bb","cc"])
where
splicefuncs = "string" ## (C.pureSplice . C.textSplice $ id)
而且secod
testSplice :: C.Splice (Handler App App)
testSplice = return $ C.yieldRuntimeText $ return "text to be spliced"
凡
(C.pureSplice . C.textSplice $ id)
產生類似的結果
return $ C.yieldRuntimeText $ return "text to be spliced"
以上是否有區別?任何情況下,一個人會喜歡另一個?他們似乎產生了相同的結果。
在編譯後的拼接庫中有一個「deferMany」函數,根據這些文檔,在解釋的lib中產生與mapSplices類似的結果。 我們可以用它來代替「C.manyWithSplices C.runChildren」的組合嗎?
@r編譯拼接是不直觀,在第一,因爲它們需要控制的反轉:你必須告訴拼接如何找到所需的運行數據。我花了一段時間才弄到這些東西。我認爲他們已經變得更容易在最新版本的搶劫中使用。 – danidiaz
@r我覺得'C.yieldRuntimeText'和'C.deferMany'就足夠了,當你不關心你想要拼接的標籤的內容時:你只需要用生成的字符串完全替換標籤。當您想渲染(一個,多個)具有字段的複雜結構時,可以使用'withSplices'和'manyWithSplices',並且您關心拼接標籤的內容,因爲它們定義了結構的「視圖」。 'withSplices'和'manyWithSplices'可以讓你在頂層拼接和渲染單個字段的子文件之間建立對應關係。 – danidiaz
@r這就是爲什麼'C.withSplices'和'C.manyWithSplices'經常與'C.runWithChildren'結合使用的原因。這基本上就像是說「使用標籤的內容作爲我們要呈現的結構的視圖」。 – danidiaz