So fügen Sie verschachtelte Modellfelder dynamisch hinzu und entfernen sie mithilfe von Haml und Formtastic

Wir haben alle gesehen, die brillante komplexe Formen railscast wo Ryan Bates erklärt, wie dynamisch hinzufügen oder entfernen von verschachtelten Objekten innerhalb des parent-Objekt form mit Javascript.

Hat jemand irgendwelche Ideen, wie man diese Methoden geändert werden müssen, so wie die Arbeit mit Haml Formtastic?

Fügen Sie einige Kontext hier ist eine vereinfachte version von dem problem habe ich derzeit:

# Teacher form (die verschachtelte Thema Formen) [my application]

- semantic_form_for(@teacher) do |form|
  - form.inputs do
    = form.input :first_name
    = form.input :surname
    = form.input :city
    = render 'subject_fields', :form => form 
    = link_to_add_fields "Add Subject", form, :subjects   

# Individuelle Subjekt bilden teilweise [aus meiner Anwendung]

- form.fields_for :subjects do |ff| 
  #subject_field
    = ff.input :name
    = ff.input :exam
    = ff.input :level
    = ff.hidden_field :_destroy
    = link_to_remove_fields "Remove Subject", ff 

# - Anwendung Helfer (gerade von Railscasts)

  def link_to_remove_fields(name, f)
    f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")
  end

  def link_to_add_fields(name, f, association)
    new_object = f.object.class.reflect_on_association(association).klass.new
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
      render(association.to_s.singularize + "_fields", :f => builder)
    end
    link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}  \")"))
  end

#Application.js (gerade von Railscasts)

  function remove_fields(link) {
  $(link).previous("input[type=hidden]").value = "1";
  $(link).up(".fields").hide();
  }

function add_fields(link, association, content) {
  var new_id = new Date().getTime();
  var regexp = new RegExp("new_" + association, "g")
  $(link).up().insert({
    before: content.replace(regexp, new_id)
  });
  }

Das problem bei der Implementierung scheint zu sein, mit der javascript-Methoden, die DOM-Struktur einer Formtastic form unterscheidet sich stark von einem regulären Schienen bilden.

Ich habe gesehen, diese Frage online ein paar mal, aber noch nicht in eine Antwort noch - nun, Sie wissen, dass Hilfe wird geschätzt, um mehr als nur mich!

Jack

InformationsquelleAutor der Frage Jack Kinsella | 2010-04-20

Schreibe einen Kommentar