2011-09-18 51 views
2

我嘗試在哈姆雷特模板內的運行時將參數傳遞給路線。Yesod:如何構建參數化路線

buildFeedRow :: Item [Attribute Text] -> GWidget a a() 
    buildFeedRow item = do 
    let f = unpackItem item 
     u :: Text = url f 
    [whamlet| 
    <tr> 
     <td> 
     <a href="#{url f}">#{url f} 
     <td>#{nextCrawlTime f} 
     <td>#{crawlDelay f} 
     <td> 
     <a href="@{DeleteFeedR u}">Delete 
     <td>Edit |] 

由於類型錯誤而失敗。

Couldn't match type `Route a' with `ConsoleRoute' 
Expected type: ConsoleRoute -> [(Text, Text)] -> Text 
Actual type: Route a -> [(Text, Text)] -> Text 
Expected type: GHandler 
       a a (ConsoleRoute -> [(Text, Text)] -> Text) 
    Actual type: GGHandler 
       a 
       a 
       (Data.Enumerator.Iteratee Data.ByteString.Internal.ByteString IO) 
       (Route a -> [(Text, Text)] -> Text) 
In the first argument of `lift', namely `getUrlRenderParams' 
In the first argument of `(>>=)', namely `lift getUrlRenderParams' 

我的問題是你如何將參數傳遞給哈姆雷特模板中的路線。

+2

我看不出有什麼毛病此位的代碼,我猜在這裏打球還有別的。也許可以嘗試添加一些類型的簽名,或者在代碼片段中包含更多周圍的代碼。 –

回答

1

我認爲你的小部件的類型簽名可能太泛化。由於您使用的路線,現在要看你的基礎類型,因此它應該有類型

buildFeedRow :: Item [Attribute Text] -> GWidget YourFoundation YourFoundation()