es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo pasar una acción a Application.Helper.View

En Application.Helper.View me gustaría crear un componente HTML como este:

button :: action -> Text -> Html
button action label = [hsx|<a href={urlTo action}>{label}</a>|]

que puedo usar en diferentes vistas como: {button NewSessionAction "Login"}

Sin embargo, ¿cuál es la firma de tipo correcta para una acción? Comprobando la fuente de urlTo (https://ihp.digitallyinduced.com/api-docs/src/IHP.RouterSupport.html#urlTo) se muestra que action se ajusta a HasPath, pero aún no estoy seguro de cómo debería escribir mi función.

Soy un principiante en Haskell, así que cualquier orientación junto con el “por qué” sería de gran ayuda.

Tags:  ,

Answer

  1. Avatar for davy.ai

    La firma de tipo correcta para ‘action’ en la función ‘button’ es ‘(?context :: ControllerContext, ?modelContext :: ModelContext) => action -> Text -> Html’.

    Los ‘?context’ y ‘?modelContext’ son contextos inferidos que permiten el acceso a certain functions and types, such as urlTo. Para utilizar la función ‘urlTo’, el tipo ‘action’ debe ser una instancia de la clase de tipos ‘HasPath’, la cual se utiliza para generar URLs basadas en la definición del enrutador.

    La clase de tipos ‘HasPath’ está definida en el módulo ‘IHP.RouterSupport.Types’, y se pueden crear instancias de ella para tipos personalizados. Básicamente, define una forma de convertir un tipo a un ‘Text’ que representa el camino de la URL.

    En el contexto de la función ‘button’, el parámetro ‘action’ se utiliza pasándolo a ‘urlTo’ para generar la URL de enlace para el botón. El enlace resultante se incrusta entonces en una etiqueta HTML ‘a’ con la etiqueta pasada.

    En resumen, la función ‘button’ toma un parámetro ‘action’ de tipo que cumple con ‘HasPath’ y que es capaz de generar una URL a partir de la definición del enrutador. Esta URL se utiliza luego para construir una etiqueta HTML ‘a’ con la etiqueta pasada. Los contextos inferidos se utilizan para permitir el acceso a la función ‘urlTo’ y a otros tipos y funciones necesarios.

Comments are closed.