指定嵌套 Phoenix 表单字段的顺序
Specify ordering of nested Phoenix form fields
我正在设置一个包含嵌套字段的表单,我该如何指定字段的顺序以免它们组合在一起。
我可以使用 inputs_for
来显示嵌套字段,但它会同时显示所有字段。我想以动态顺序显示它们。
例如:
<%= inputs_for f, :apples, fn fa -> %>
<%= label fa, :name %>
<%= text_input fa, :name %>
<%= error_tag fa, :name %>
<% end %>
<%= inputs_for f, :oranges, fn fo -> %>
<%= label fo, :name %>
<%= text_input fo, :name %>
<%= error_tag fo, :name %>
<% end %>
这将为每个嵌套关联将所有苹果和橘子字段组合在一起。所以对于 2 个苹果和 3 个橙子,它将显示:
-苹果
-苹果
-橙色
-橙色
-橙色
我想要的是像这样显示它们:
-苹果
-橘子
-苹果
-橘子
-橘子
您可以访问from中的数据,它是在form_for/4
中传递给回调函数的表单变量。所以你可以创建一个采用这种形式的函数,对你的苹果和橙子进行排序和组合,然后根据你的顺序呈现它们。
<%= form_for @settings, Routes.config_path(@conn, :save), fn f -> %>
<%= render_apples_and_oranges(f) %>
<% end %>
然后在你的 view 文件中定义函数 render_apples_and_oranges
def apples_and_oranges(%{data: %{apples: apples, oranges: oranges}} = form) do
# Sort and combine apples and oranges
render("apples_oranges_field_template.html", form: form, apples_and_oranges: sorted_apples_and_oranges)
end
然后创建用于渲染苹果和橙子的新模板:
<%= for field <- @fields do %>
<%= text_input(@form, field.name, value: field.value %>
<% end %>
我正在设置一个包含嵌套字段的表单,我该如何指定字段的顺序以免它们组合在一起。
我可以使用 inputs_for
来显示嵌套字段,但它会同时显示所有字段。我想以动态顺序显示它们。
例如:
<%= inputs_for f, :apples, fn fa -> %>
<%= label fa, :name %>
<%= text_input fa, :name %>
<%= error_tag fa, :name %>
<% end %>
<%= inputs_for f, :oranges, fn fo -> %>
<%= label fo, :name %>
<%= text_input fo, :name %>
<%= error_tag fo, :name %>
<% end %>
这将为每个嵌套关联将所有苹果和橘子字段组合在一起。所以对于 2 个苹果和 3 个橙子,它将显示:
-苹果
-苹果
-橙色
-橙色
-橙色
我想要的是像这样显示它们:
-苹果
-橘子
-苹果
-橘子
-橘子
您可以访问from中的数据,它是在form_for/4
中传递给回调函数的表单变量。所以你可以创建一个采用这种形式的函数,对你的苹果和橙子进行排序和组合,然后根据你的顺序呈现它们。
<%= form_for @settings, Routes.config_path(@conn, :save), fn f -> %>
<%= render_apples_and_oranges(f) %>
<% end %>
然后在你的 view 文件中定义函数 render_apples_and_oranges
def apples_and_oranges(%{data: %{apples: apples, oranges: oranges}} = form) do
# Sort and combine apples and oranges
render("apples_oranges_field_template.html", form: form, apples_and_oranges: sorted_apples_and_oranges)
end
然后创建用于渲染苹果和橙子的新模板:
<%= for field <- @fields do %>
<%= text_input(@form, field.name, value: field.value %>
<% end %>