最近我偶然发现了以下问题:
使用yesod我想要的
FormFailure 重定向浏览器到前一页就我而言,这POST/Redirect/GET就是全部.
虽然<1-3>点需要简单直接的实现,但我发现无法实现点<4>!
所述耶索德形式包自动处理此问题,但不允许形式之间的任何重定向解析<2>和错误处理<3,4>如我想的那样.
您建议我应该序列化提交的数据,并在重定向后以某种方式将其注入表单.这会导致更详细的问题:
如何获取序列化数据?
我知道我可以使用,但哪些是相关信息(字段的s是自动生成的)?runRequestBody:: GHandler s m RequestBodyContentsname
如何将数据注入表单?
如果你看一下例如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不允许我这样做.
我该如何处理这个问题?
为了在外部保存用户帐户权限(例如在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)
请注意,接受的答案包含更有效的实现.
让我感到困扰的是倒车功能.我可以想象它应该有这种类型: …
具有以下自动生成的表格布局(我几乎没有影响它)
<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(例如,选中/取消选中全部或恢复默认值)导致所需操作的链接已在正确的标题中.
解决这个问题的最佳方法是什么?