J'ai ce code et cela fonctionne parfaitement. Il bascule certains styles dans le champ de saisie de texte en fonction de la valeur du champ.Elément parent dynamique
numberInput :: (MonadWidget t m) => m (Dynamic t (Maybe Double))
numberInput = divClass "form-group" $ do
let errorState = "style" =: "border-color: red"
validState = "style" =: "border-color: green"
rec n <- textInput $ def & textInputConfig_inputType .~ "number"
& textInputConfig_initialValue .~ "0"
& textInputConfig_attributes .~ attrs
let result = fmap (readMay . unpack) $ _textInput_value n
attrs = fmap (maybe errorState (const validState)) result
return result
J'ai rencontré des problèmes de dynamisation de l'élément parent. Je voudrais basculer les styles sur l'élément parent de la saisie de texte. Je voudrais écrire quelque chose comme mais échoué!
numberInput :: (MonadWidget t m) => m (Dynamic t (Maybe Double))
numberInput = do
rec
dynAttrs <- -- reference to textInput
elDynAttr "div" dynAttrs $ do
n <- textInput $ def & textInputConfig_inputType .~ "number"
& textInputConfig_initialValue .~ "0"
...
Merci de votre aide!
Que signifie 'échoué'? Une erreur de compilation (l'inclure * verbatim * et dans * c'est l'intégralité) ou une erreur d'exécution (la décrire)? [Vous n'avez pas envoyé de programme complet] (https://stackoverflow.com/help/mcve). Il est donc presque impossible de dire pourquoi votre programme ne fonctionne pas. – user2407038
Donc 'failed' signifie que je voudrais réécrire le code de travail de la fonction numberInput de manière à ce que les attributs dynamiques soient définis sur le noeud DOM parent, mais je n'ai qu'une vague idée de comment cela pourrait fonctionner. Je n'ai pas assez compris comment réfléchir fonctionne donc je suis un peu perdu sur la façon de procéder et je ne peux pas fournir un exemple de code ou un message d'erreur. Mais j'ai une question très concrète. Comment réécrire le code parfaitement bon que je fournis d'une manière que les attributs dynamiques sont définis sur le nœud DOM parent. – Schoon
"Comment réécrire ce code pour faire X au lieu de Y" est hors-sujet pour SO. Je suppose que vous voulez faire référence à 'n' dans le rhs de' dynAttrs', mais 'n' est lié dans la portée interne de l'argument passé' elDynAttr'. La solution est probablement de retourner 'n' (et toutes autres choses dont vous pourriez avoir besoin) de cette portée interne, et de lier de nouveau ces variables dans la portée externe:' do {dynAttrs <- .. n ..; (résultat, n) <- elDynAttr "div" dynAttrs $ do {n <- ..; ..; return (résultat, n)}; renvoie le résultat} '. (Je ne sais pas assez sur DOM pour dire à coup sûr). – user2407038