小编Jak*_*kub的帖子

使用yesod-form在POST/Redirect/GET后保持不正确的用户输入

最近我偶然发现了以下问题:
使用yesod我想要的

  1. 显示一个应用表单,让用户将他的数据发送给一个特殊的处理程序
  2. FormFailure 重定向浏览器到前一页
  3. 打印错误消息...
  4. ...并重新显示已填充不正确的用户提供的数据的表单

就我而言,这POST/Redirect/GET就是全部.

虽然<1-3>点需要简单直接的实现,但我发现无法实现点<4>!
所述耶索德形式包自动处理此问题,但不允许形式之间的任何重定向解析<2>和错误处理<3,4>如我想的那样.

回应Michael Snoyman的回答

您建议我应该序列化提交的数据,并在重定向后以某种方式将其注入表单.这会导致更详细的问题:

  1. 如何获取序列化数据?

    我知道我可以使用,但哪些是相关信息(字段的s是自动生成的)?runRequestBody:: GHandler s m RequestBodyContentsname

  2. 如何将数据注入表单?

    如果你看一下例如aopt的类型

    aopt :: Field sub master a -> FieldSettings master -> Maybe (Maybe a) -> AForm sub master (Maybe a)
    
    Run Code Online (Sandbox Code Playgroud)

    你会发现它要求默认值与Field它的类型相同,因此无法重新插入可能无法正确解析的用户提供的数据.

    示例:用户在"a"中键入"A" intField.现在我希望能够在重定向后在同一个字段中显示"A",但API不允许我这样做.

我该如何处理这个问题?

forms haskell post-redirect-get yesod

8
推荐指数
1
解决办法
484
查看次数

以Int为单位表示枚举列表

为了在外部保存用户帐户权限(例如在DB中),我想表示枚举的元素列表,其中派生Enum实例为Int.
数字的每一位都被视为一个标志(或布尔),表示列表中是否存在第i个元素.
用不同的词语表示 - 每个2的幂表示一个元素,这些幂的总和是唯一的元素列表.

例:

data Permissions = IsAllowedToLogin   -- 1
                 | IsModerator        -- 2
                 | IsAdmin            -- 4
                 deriving (Bounded, Enum, Eq, Show) 

enumsToInt [IsAllowedToLogin, IsAdmin] == 1 + 4 == 5

intToEnums 3 == intToEnums (1 + 2) == [IsAllowedToLogin, IsModerator]
Run Code Online (Sandbox Code Playgroud)

将这样的列表转换Int为a的函数很容易编写:

enumsToInt :: (Enum a, Eq a) => [a] -> Int
enumsToInt = foldr (\p acc -> acc + 2 ^ fromEnum p) 0 . nub
Run Code Online (Sandbox Code Playgroud)

请注意,接受的答案包含更有效的实现.

让我感到困扰的是倒车功能.我可以想象它应该有这种类型: …

enums haskell bit-manipulation

5
推荐指数
1
解决办法
645
查看次数

使用JQuery选择标头之间的所有表行

具有以下自动生成的表格布局(我几乎没有影响它)

<table>
   <tr>
      <th>First Header</th>
      <th>
         <a href="#" class="used-for-some-action">show/hide</a>
      </th>
   </tr>
   <tr>
      <td>A question?</td>
      <td><input value="User's answer" /></td>
   </tr>
   <!-- Some more rows -->

   <tr>
      <th>Second Header</th>
   </tr>

   <!-- Some more question blocks -->
</table>
Run Code Online (Sandbox Code Playgroud)

...我想<tr>使用Javascript/jQuery 选择两个标头之间的所有元素,以便提供如下功能:

  • 隐藏属于某个标题的所有问题.
  • 自动编辑<input>s(例如,选中/取消选中全部恢复默认值)

导致所需操作的链接已在正确的标题中.

解决这个问题的最佳方法是什么?

javascript forms jquery dom

2
推荐指数
1
解决办法
599
查看次数