【发布时间】:2021-05-14 22:11:45
【问题描述】:
在具有 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 和item3 的更改(与显示的内容相匹配)。但是,在选择 item2 后,item3 将显示第一个选项(如预期的那样)。之后,变更集确实包含 item1 和 item2 更改,但 item3 选择的选项不存在。
问题:
- 如何让依赖选择标签(
item2和item3)在更改为第一个选择(item1)后显示它们各自的第一个选项? - 如何将依赖选择标签中的“默认”选项获取到变更集中?
【问题讨论】: