在 Yesod SubSite 中创建编辑操作

Posted

技术标签:

【中文标题】在 Yesod SubSite 中创建编辑操作【英文标题】:create edit operation in a Yesod SubSite 【发布时间】:2015-08-13 11:35:10 【问题描述】:

我在 Yesod 的子站点中创建 CRUD 操作时遇到很多问题,我有以下路线

mkYesodSubData "DemoCrud" [parseRoutes|
/demoNew DemoNewR GET POST
/demoEdit/#DemoId DemoEditR GET POST
|]

和下面的 subDispach 实例

instance (Yesod master,RenderMessage master FormMessage, YesodPersist master, YesodPersistBackend master ~ SqlBackend) 
  => YesodSubDispatch DemoCrud (HandlerT master IO) 
  where
 yesodSubDispatch = $(mkYesodSubDispatch resourcesDemoCrud)

但是有这个错误

Couldn't match expected type ‘DemoId
                              -> HandlerT DemoCrud (HandlerT parent1 IO) a0’
            with actual type ‘HandlerT DemoCrud (HandlerT master0 IO) html

我正在搜索,但在页面示例中不要在路线中使用 Id

【问题讨论】:

也许有人有一个子站点中 Crud 操作的完整示例,可以帮助我很多 从提供的信息中很难判断,但我猜你在getDemoEditRpostDemoEditR 上的类型签名错误。 谢谢你,你是对的我在 postDemoEditR 中有错误, 【参考方案1】:

Michael Snoyman 是对的,我在 postDemoEditR 中有错误,所以下面的代码是更正

getDemoEditR :: YesodPersist master
         => YesodPersistBackend master ~ SqlBackend 
         => (Yesod master,RenderMessage master FormMessage) 
         => DemoId -> HandlerT DemoCrud (HandlerT master IO) Html 
getDemoEditR  demoId =  do
           demo <- lift $ runDB $ get404 demoId  
           (widget, encoding) <- lift $ generateFormPost $ renderBootstrap3 BootstrapBasicForm $ demoForm  (Just demo)
           lift $ defaultLayout $ do     
               [whamlet|
                    <form method=post>
                          ^widget
                          <div>
                                <input type=submit>
                        |]  

 postDemoEditR :: YesodPersist master
          => YesodPersistBackend master ~ SqlBackend 
          => (Yesod master,RenderMessage master FormMessage) 
          => DemoId -> HandlerT DemoCrud (HandlerT master IO) Html
postDemoEditR demoId  = do
            demo <- lift $  runDB $ get404 demoId
            ((result,widget), encoding) <- lift $ runFormPost $ renderBootstrap3 BootstrapBasicForm $ demoForm  (Just demo)
            case result of
                 FormSuccess demoResult -> do 
                             _ <- lift $ runDB $ replace demoId  demoResult
                             redirect DemoNewR 
                 _ -> lift $  defaultLayout $ do     
                        [whamlet|
                              <form method=post>
                                    ^widget
                                    <div>
                                          <input type=submit>
                        |]  

【讨论】:

以上是关于在 Yesod SubSite 中创建编辑操作的主要内容,如果未能解决你的问题,请参考以下文章

ARCGIS10软件中创建要素窗口不见了,怎么弄出来啊

在 iOS 中创建可编辑的表格视图?

Kendo UI - 如何在编辑时使特定字段只读,同时在剑道网格中创建可编辑?

由于在内容类型中创建 65 个字段,节点添加/编辑页面加载缓慢

如何在 Django 中创建用于编辑的填充表单

如何在jqgrid中创建内联可编辑行?