2013-06-11 35 views
5

我似乎無法掌握已編譯的heist概念。無論如何,網上都沒有例子。我將如何去改變從解釋到編譯的簡單代碼片段。從解釋到編譯heist

例如:

listUsersH :: AppHandler() 
listUsersH = do 
    users <- liftIO $ getColList "users" 
    let userListS = mapSplices userLinkS users 
    heistLocal (bindSplice "users" userListS) $ render "list-users" 
    where 
    userLinkS d = runChildrenWithText [("user",T.pack $ at "uname" d)] 

我會怎麼做 「runChildren」, 「mapSplices」 的簡單組合, 「bindSplice」 和 「渲染」 編譯搶劫?

我明白這個概念是不同的,沒有「heistLocal」..但我現在需要回去重新學習如何做基本的事情,比如在「for each」循環中顯示一堆記錄方式。有人可以澄清這一點,並顯示一個簡單的例子,像上面的一個,但編譯搶劫?

此刻我甚至不知道如何做簡單的變量替換編譯heist。 舉例來說,這樣的:

simpleString = "Insert me..." 
insertString = heistLocal (bindSplices spl) $ render "tst" 
where 
    spl = [("var", textSplice simpleString)] 

請別人幫我的基礎知識或指向我的一些例子最小的位置。我確實閱讀了快照網站文檔。

回答

1

編譯接頭肯定比較難處理。首先,所有接頭必須靜置在前面。這需要思維方式發生相當大的轉變。在使用heistLocal之前,您可以將接頭視爲有限的範圍,可以在需要時進行綁定。您可以在使用請求中的信息的處理程序中做出決定,然後相應地綁定拼接。你仍然可以用編譯拼接做類似的事情,但它需要一個控制反轉。現在你必須在splice內部進行這種動態的基於請求的決策(這是你的處理器monad周圍的monad變換器,所以你仍然可以訪問處理函數)。

我建議您將編譯接頭視爲全球資源,讓您的網頁設計師可以在任何頁面上使用它們,但他們認爲合適。以這種方式查看接頭有幾個優點。首先,它使得它們比heistLocal綁定的專用拼接更加正交和可組合。其次,它使調試變得更容易,因爲您不必擔心拼接是否受到約束。

但編譯拼接的最大困難是由加載時間和運行時間之間的分割以及拼接函數的意義所引起的。我們在關於migrating to Heist 0.10的維基頁面的最後一節討論了這一點。在這之後我們也有a longer discussion of the "why"

我們還在努力改進編譯後的Heist的API。我們非常接近完成海斯特0.13,這大大簡化了API,應該有助於讓事情變得更容易理解。 github上new-api分支中的代碼已經準備好發佈了。 OK。

+0

OK。那麼,你會建議現在堅持解釋的變體嗎?那麼,至少在你理清API並穩定它們之前。我仍然無法理解這個概念,說實話...它還沒有點擊。所以我會在makeSnaplet函數的最開始綁定和處理所有的拼接,對吧? –

+0

您不必一次完成所有操作,但您必須使用addConfig函數來添加所有已編譯的拼接。你是否切換取決於你想成爲如何出血的邊緣。我沒有預見到新的api分支會發生更多變化。我的待辦事項列表中剩下的唯一東西是添加一個或兩個以上的功能。那裏的一切都應該相當穩定。在我發佈0.13之前,我不會給出具體的代碼答案,但如果您打開IRC,我可以指出您正確的方向。 – mightybyte

+0

謝謝mightybyte,我會在0.13發佈後等待你的一些例子。至少最常見的模式。這將是非常有用的,因爲網上沒有任何東西。到現在爲止,我會堅持使用解釋的變體。 –