【问题标题】:How to dynamically increment a counter inside fields_for?如何动态增加fields_for中的计数器?
【发布时间】:2019-09-26 14:36:17
【问题描述】:

我正在构建一个表单,人们可以在其中通过表单添加日常挑战。此表格应垂直列出一周中每一天的项目。这些天应按第 # 周分组。

以这种方式:

第 1 周

  • 挑战#1
  • 挑战#2
  • 挑战#3

第 2 周

  • 挑战#4
  • 挑战#5
  • 挑战#6

我使用一个按钮来动态添加项目,并且在添加这些项目时也会发生递增。在一周内完成 7 次每日挑战后,应在 UI 上创建一个新的周部分。

我使用了 fields_for 并尝试使用一个简单的计数器,在每次迭代中递增它。

<% i = 1 %>

<div id="challenges_container">
<%= f.fields_for :challenges do |mi| %>
<% i += 1 %>
<%= i %>

<% end %>
</div>

<p><%= f.link_to_add '<i class="fi-plus"></i> Add Challenge'.html_safe, :challenges, :data => {:target => '#challenges_container'} %></p>

我希望每次单击“添加挑战”按钮时“i”计数器都会增加 1,但在我最初加载页面时它只会设置为“2”。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 fields-for


    【解决方案1】:

    你应该看看:Rails: fields_for with index?

    在你的情况下,尝试:

    <% @challenges.each_with_index do |challenge, index| %>
      <%= f.fields_for :challenges, challenge do |fc| %>
      ## Do whatever you want with challenge and index
      <% end %>
    <% end %>
    

    【讨论】:

      【解决方案2】:

      Mark 指出的解决方案确实可以很好地在第一次加载时获取项目的索引。对于任何希望使其动态工作的人,我必须使用 Javascript。您可以在此处找到有关它的更多信息:Javascript events 这样您即使在 DOM 加载后也可以对其进行操作(例如,用于添加新元素)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-18
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2019-04-27
        相关资源
        最近更新 更多