如何将动作传递给 Application.Helper.View
How to pass an action into Application.Helper.View
在 Application.Helper.View
中,我想创建一个 HTML 组件,例如:
button :: action -> Text -> Html
button action label = [hsx|<a href={urlTo action}>{label}</a>|]
我可以在各种视图中使用它,例如:{button NewSessionAction "Login"}
但是,动作的正确类型签名是什么?检查 urlTo
(https://ihp.digitallyinduced.com/api-docs/src/IHP.RouterSupport.html#urlTo) 的来源显示 action
符合 HasPath
但我仍然不确定我应该如何编写我的函数。
我是 Haskell 的新手,所以任何指导以及“为什么”都会有很大帮助。
(@pedrofurla 和@MarcScholten 的回答)
- 导入IHP.RouterPrelude:
import qualified IHP.RouterPrelude as Router
- 将 HTML 组件函数更改为如下所示:
button :: (?context :: context, ConfigProvider context, Router.HasPath action) => action -> Text -> Html
button action label = [hsx|<a href={Router.urlTo action}>{label}</a>|]
在 Application.Helper.View
中,我想创建一个 HTML 组件,例如:
button :: action -> Text -> Html
button action label = [hsx|<a href={urlTo action}>{label}</a>|]
我可以在各种视图中使用它,例如:{button NewSessionAction "Login"}
但是,动作的正确类型签名是什么?检查 urlTo
(https://ihp.digitallyinduced.com/api-docs/src/IHP.RouterSupport.html#urlTo) 的来源显示 action
符合 HasPath
但我仍然不确定我应该如何编写我的函数。
我是 Haskell 的新手,所以任何指导以及“为什么”都会有很大帮助。
(@pedrofurla 和@MarcScholten 的回答)
- 导入IHP.RouterPrelude:
import qualified IHP.RouterPrelude as Router
- 将 HTML 组件函数更改为如下所示:
button :: (?context :: context, ConfigProvider context, Router.HasPath action) => action -> Text -> Html
button action label = [hsx|<a href={Router.urlTo action}>{label}</a>|]