在具有 3 个选择标签的 phoenix LiveView 表单中,第一个影响其他两个,即依赖的两个应该只显示第一个可用的选项,如下所示:
<%= f = form_for @changeset, "#", id: "eval-form", phx_target: @myself, phx_change: "validate", phx_submit: "save" %>
<%= select(f, :item1_id, Enum.map(@item1s, fn {_,v} -> {v.name, v.id} end), prompt: "Choose item1...") %>
<% item1_id = @changeset |> Ecto.Changeset.get_field(:item1_id) %>
<%= select(f, :item2_id, item1_id && Enum.map(@item1s[item1_id].item2s, &{&1.name, &1.id}) || []) %>
<%= select(f, :item3_id, item1_id && Enum.map(@item1s[item1_id].item3s, &{&1.name, &1.id}) || []) %>
</form>
当item1
被选中时,item2
选择item3
标签确实包含正确的相应选项,但不显示任何选择的项目(因为它们不包含提示,所以应该选择第一个选项)。变更集不包括对item2
and的更改item3
(与显示的内容匹配)。但是,在item2
选择之后,item3
将显示第一个选项作为选择(如预期的那样)。之后,变更集确实包含item1
并item2
更改,但item3
选择的选项不存在。
问题:
- 如何让依赖选择标签(
item2
和item3
)在更改为第一个选择(item1
)后显示它们各自的第一个选项? - 如何从依赖选择标签中获取“默认”选项到变更集中?