2015-06-02 21 views
8

Próbuję użyć prostego formularza z aplikacją mojej szyny 4.Prosta forma - szyny 4 - edycja

Mam model projektu, który ma model zakresu. Zakres należy do projektu. Mam trzeci model, zwany uczestnikiem, który należy do zakresu. Zakres akceptuje zagnieżdżone atrybuty dla uczestnika, a projekt akceptuje zagnieżdżone atrybuty dla zakresu.

Kiedy tworzę nowy projekt, mój formularz zawiera części, które są zagnieżdżonymi formularzami dla każdego zakresu i uczestnika. W mojej formie zakresu, pytam, czy ten projekt angażuje uczestników. Jeśli odpowiedź jest prawdziwa, używam pomocnika formularza JS, aby pokazać ukrytą część zawierającą formularz uczestnika.

Jeśli po utworzeniu projektu chcę go edytować, funkcja edycji zwraca mnie do formularza projektu, który pokazuje pole wyboru uczestnika (jako prawdziwe), ale ukrywa formularz uczestnika.

Moje pytanie brzmi: jeśli pole wyboru uczestnika jest zaznaczone jako prawdziwe, należy ujawnić formularz uczestnika zagnieżdżony w formularzu projektu. Mój pomocnik formularza JS ukrywa ten formularz, dopóki pole nie zostanie zaznaczone jako prawdziwe, i to działa poprawnie w trybie tworzenia, ale muszę usunąć zaznaczenie pola uczestnika w formularzu zakresu i ponownie je sprawdzić, aby odsłonić formularz uczestnika - dzięki czemu mogę edytować te pola.

Czy wiesz, jak ujawnić formularz uczestnika, jeśli pytanie o zakres dotyczące pytania o udział jest prawdziwe bez odznaczenia i ponownego sprawdzenia formularza?

Mój kod wygląda następująco:

W moim formularzu JS pomocnika, mam (które ukrywa uczestnika zagnieżdżone formularza chyba kwestia zakres pytaniem, czy uczestnictwo jest poszukiwany jest prawdą):

$(document).on 'change', '#' + inString + '_scope_attributes_if_participant',()-> 
    if $('#' + inString + '_scope_attributes_if_participant').is(':checked') 
    $('#participationrequest').show() 
    else 
    $('#participationrequest').hide() 

W moja forma zakres, mam:

<%= s_all.input :if_participant, :as => :boolean, :label => false, inline_label: 'Public participants or volunteers' %> 

Dziękuję

+0

znalazłem sposób, który działa, czyli: – Mel

Odpowiedz

4
if $('#' + inString + '_scope_attributes_if_participant').is(':checked') 
    $('#participationrequest').show() 
else 
    $('#participationrequest').hide() 
$(document).on 'change', '#' + inString + '_scope_attributes_if_participant',()-> 
    if $('#' + inString + '_scope_attributes_if_participant').is(':checked') 
    $('#participationrequest').show() 
    else 
    $('#participationrequest').hide() 
0

Jesteś obecnie tylko sprawdza, czy pole wyboru jest zaznaczone po zmianie. Jeśli jednak formularz zostanie załadowany z zaznaczonym polem, zdarzenie change nie zostanie uruchomione, a zatem twój kod nie zostanie wykonany.

aby uruchomić wyboru podczas wczytywania strony, dodać coś takiego do JS (wybacz mi za napisanie go w JS zamiast coffeescript):

$(document).on('ready',function(){ 
    if $('#' + inString + '_scope_attributes_if_participant').is(':checked') 
     $('#participationrequest').show(); 
} 

Należy pamiętać, że nie trzeba drugi część czeku tutaj, ponieważ domyślnie ukrywa się element #participationrequest.

+0

Cześć, dziękuję bardzo za pomoc. Obawiam się, że to nie działa dla mnie - w trybach tworzenia lub aktualizacji. – Mel

+0

sprawdź konsolę JS pod kątem błędów. Może selektor '$ ('#' + inString + '_scope_attributes_if_participant')' nie jest poprawny? a może ta część formularza jest ładowana po przygotowaniu strony przez ajax, więc element nie istnieje jeszcze na document.ready? – tbrisker

0

Spróbuj tego:

<div id='participationrequest' style='<%= "display:none;" unless scope.if_participant? %>'> 
    <%= render partial: 'you_form_partial' %> 
</div>