【问题标题】:How to add nested form field into current form dynamically?如何动态地将嵌套表单字段添加到当前表单中?
【发布时间】:2015-10-07 07:40:39
【问题描述】:

UsersChatgroups 之间存在多对多关系。直观地说,Users 可以有多个Chatgroups,每个Chatgroup 可以有很多用户。

我已经使用名为UserChatGroup 的连接表实现了这一点。

在我的聊天组控制器中,当路由到new 函数时,我可以通过指定userChatGroups:[%UserChatGroup{},%UserChatGroup{}] 等硬编码聊天组中的成员数量,其中硬编码的数字是这个数组的大小。

例如,我的新聊天组控制器硬编码 1 个用户:

def new(conn, _params) do
    changeset = ChatGroup.changeset(%ChatGroup{userChatGroups: [%UserChatGroup{}]})
    render(conn, "new.html", changeset: changeset)
end

在我的新模板中,它引用了一个表单。表格的相关部分如下:

 <%= inputs_for f, :userChatGroups, fn i -> %>
    <div class="form-group">
      <%= label i, :user_id, "User Id", class: "control-label" %>
      <%= number_input i, :user_id, class: "form-control" %>

    </div>
 <% end %>

但是,我想删除聊天组中这个硬编码的成员数量。相反,我希望用户能够动态添加成员。

但是,我遇到了麻烦。执行此操作的 rails 方法是调用访问表单对象并更新它的函数。然后用javascript插入输入字段。提交时,新的输入字段将是新表单对象的字段。

但是我不知道如何使用 Phoenix 框架来做到这一点。

我的第一个问题:

  1. 如何在view.html.eex 中定义函数,以便在单击时调用它们而不是简单地立即呈现?好像当我尝试使用 &lt;%= functionFromMyView %&gt; 时,该函数在我的页面初始加载时呈现。我想在单击“添加”按钮时调用此函数,因此我需要弄清楚如何仅在单击时调用此函数。这可能吗?

问题 2,更具体到我的用例:

  1. 如何将%UserChatGroup{} 动态添加到我的表单中?

我假设一旦我知道如何通过单击从我的视图中调用一个函数,然后我可以使用该函数将 %UserChatGroup{} 插入我的表单,然后使用 javascript,插入一个输入字段连接到新插入的嵌套UserChatGroup 字段。

任何指导将不胜感激。

【问题讨论】:

标签: phoenix-framework


【解决方案1】:

我无法在表单中添加%UserChatGroup{}

我相信这是因为网络是 HTML、CSS 和 JS,而上面是 Elixir

因此我假设我的解决方案必须是 javascript。

我检查了页面上的 html,它告诉我 %UserChatGroup{} 输入字段的名称为 name="chat_group[userChatGroups][0][user_id]"

chat_group 是我正在创建的模型的名称,

userChatGroups是我创建的用于处理聊天组成员的数组,

[0] 是输入数组的索引,可以随你想要的组变大

user_id 是我的联接表中的字段。

索引是您需要更改的唯一值。

使用javascript,我在表单中插入了输入字段,带有name="chat_group[userChatGroups][--indexnumber--][user_id]",提交时,表单自然也会提交我新添加的输入。 (替换索引号)

这种方式可以根据需要处理添加任意数量的聊天组用户。

【讨论】:

  • 我也有同样的问题。谢谢你的回答。
猜你喜欢
  • 2014-07-14
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 2018-08-26
  • 1970-01-01
  • 2017-10-07
相关资源
最近更新 更多