【问题标题】:dynamically add fields to nested form onchange of select动态添加字段到嵌套表单 onchange of select
【发布时间】:2014-07-14 20:30:29
【问题描述】:

我在点击 add_fields 和 remove_fields 时成功添加和删除字段。但是现在我想根据父表单中下拉列表的值一次添加 N 次字段。 怎么做? 这是我的父表单

= f.select :total_section, (0..10),{}, :onchange => "generate_form(this.value)"
    .field
      = f.fields_for :score_sheet_sections do |s|
        %div.fields
          = render 'score_sheet_section_fields', :f => s
      %div.fields
        = link_to_add_fields "Add Score Sheet Sections", f, :score_sheet_sections

在我的生成表单函数中,我只有这个:

function generate_form(number) {
      for (i = 1; i <= number; i++) {
          console.log(i);
      }
  }

我想选择部分的数量(比如 N 或存储在 N 中),然后添加 score_sheet_sections N 次

【问题讨论】:

    标签: javascript jquery ruby-on-rails forms nested-forms


    【解决方案1】:

    选择节数(比如 N 或将其存储在 N 中)然后添加 score_sheet_sections N 次)

    我不知道你目前是如何处理这个问题的,但是如果你使用与this 类似的方法(即使用 Ajax 调用单独的方法) ,您可能希望在方法中包含一个参数,该参数允许您根据参数返回行数,如下所示:

    --

    路线

    #config/routes.rb
    resources :controller do
       collection do
          get :new_field
       end
    end
    

    --

    控制器

    #app/controllers/your_controller.rb
    respond_to :js, only: :new_field
    
    def new_field num = 1 #-> arg defaults to 1
       num = params[:num] if params[:num]
    
       @model = Model.new
       @model.nested_categories.build
    
       render "controller/form", num: num
    end
    
    #app/views/controller/new_field.html.erb
    <%= form_for @model do |f| %>
        <%= render partial: "field", locals: { num: parmas[:num], f: f } %>
    <% end %>
    
    #app/views/controller/_field.html.erb
    <% num.each do |i| %>
        <%= f.fields_for :association, child_index: Time.now.to_i do |a| %>
             <%= a.text_field :attribute %>
        <% end %>
    <% end %>
    

    --

    ** JS **

    = f.select :total_section, (0..10),{}, :onchange => "generate_form(this.value)"
    
    #app/assets/javascripts/application.js.erb
    var generate_form = function( num ){
       $.ajax({
           url: "new_fields/?num=" + num,
           type: "GET",
           success: function(data) {
               //append returned data to view
           }          
       })
    }
    
    • 根据this SO post,您可以在GET 请求中将数据附加到URL

    这将为您的 ajax 请求返回一个构建的表单,允许您对其进行解析并附加到视图中

    【讨论】:

    • 对不起,您误会了 - 您提到您的 javascript 工作正常。我打算将我的代码集成到 您的 javascript - 如果您愿意,我可以发布更多 JS 代码?
    • 是的,那会更有帮助
    • 几个问题! 1. 在 ajax url 中,我们只需要有 url: "add_fields" 2. 在 ajax data 中,我们需要有 {num: num}
    • 我正在尽我所能。所以我不想打扰你太多时间
    • 大声抱歉(这里是早上!)至少他们填充了正确的数据 - 让我再试一次
    【解决方案2】:

    只需按照此 railscasts 教程添加和删除嵌套资源字段 http://railscasts.com/episodes/197-nested-model-form-part-2?view=asciicasthttp://railscasts.com/episodes/196-nested-model-form-revised?view=comments

    如果需要更多帮助,请告诉我。

    【讨论】:

    • 我已按照教程进行操作并成功了。但我想选择节数(比如 N 或将其存储在 N 中),然后添加 score_sheet_sections N 次。
    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多