【问题标题】:HTML form with array of maps带有地图数组的 HTML 表单
【发布时间】:2018-05-18 13:23:58
【问题描述】:

说我想使用一个数组,其中值是映射。

IE

[ %{ "foo" => "bar"}, %{ "foo" => "baz"} ]

我可以使用它。

 <input name = "post[list][][foo]" value = "bar">
 <input name = "post[list][][foo]" value = "baz">

好的,但如果我想向其中一个地图或两者添加更多键怎么办?

这对我来说是分崩离析的地方。

<input name = "post[list][][email]" value = "1@aol.com">
<input name = "post[list][][primary]" value = "false">

<input name = "post[list][][email]" value = "2@aol.com">
<input name = "post[list][][primary]" value = "true">

我最终得到了一个包含 4 个项目的数组。

[%{"email" => "1@aol.com"}, %{"primary" => "false"}, %{"email" => "2@aol.com"}, %{"primary" => "true"}]

当我真正想要的是一个由两个项目组成的数组时。

[%{"email" => "1@aol.com", "primary" => "false"}, %{"email" => "2@aol.com", "primary" => "true"}]

请注意,每个映射都有两个键 emailprimary 作为所需映射。 IE %{"email" =&gt; "1@aol.com", "primary" =&gt; "false"} 与我最终得到的结果相反,它是一个由 4 个映射组成的数组,每个映射都有一个键。

现在我知道这与我命名输入的方式有关。有谁能帮帮我吗?

仅供参考,此数组和映射的上下文来自 Elixir。

【问题讨论】:

标签: html arrays forms elixir


【解决方案1】:

我打赌你在迭代渲染输入时有索引。

您可以使用索引呈现这样的输入。

<input name = "post[list][0][email]" value = "1@aol.com">
<input name = "post[list][0][primary]" value = "false">

<input name = "post[list][1][email]" value = "2@aol.com">
<input name = "post[list][1][primary]" value = "true">

【讨论】:

  • 最终结果是一个单一的地图,其中键是索引。 IE %{"1" =&gt; %{"bar" =&gt; "1", "foo" =&gt; "1"}, "2" =&gt; %{"bar" =&gt; "1", "foo" =&gt; "1"}} [] 的要点是我想让父母成为一个数组
  • @PolygonPusher 这看起来像是要走的路。您必须手动转换它,因为您的原始形式不明确——它可能表示 Plug 当前返回的内容或您想要的内容。两者都是具有这些名称的表单的有效解码。
  • 虽然我同意这是最好的解决方法,但我想保持开放,让任何人都有机会尝试解决根本问题。那是一个包含许多多值关联数组的单个数组
猜你喜欢
  • 2021-08-16
  • 2015-11-08
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2017-01-04
  • 2017-07-29
  • 2021-04-10
  • 2021-10-11
相关资源
最近更新 更多