2015-06-02 111 views
8

我想用我的導軌4應用程序使用簡單的形式。簡單形式 - 導軌4 - 編輯

我有一個項目模型,它有一個範圍模型。範圍屬於項目。我有第三種模式,稱爲參與者,屬於範圍。作用域接受參與者的嵌套屬性,而項目接受作用域的嵌套屬性。

當我創建一個新項目時,我的表單中有部分是針對範圍和參與者的嵌套表單。在我的範圍表格中,我問這個項目是否涉及參與者。如果答案是真的,我使用JS表單助手來顯示包含參與者表單的隱藏部分。

如果在創建項目後想編輯它,編輯功能會將我返回到項目窗體,該窗體顯示參與者的複選框(爲true),但隱藏參與者窗體。

我的問題是,如果參與者複選框被選中爲true,則應該顯示嵌套在項目表單中的參與者表單。我的JS表單助手隱藏了這個表單,直到該框被選中爲true,並且這在創建模式下工作正常,但我需要取消範圍表單中的參與者框並重新檢查它以便顯示參與者表單 - 以便我可以編輯這些字段。

如果詢問有關參與的範圍問題是否屬實,而沒有取消選中並重新檢查表單,您是否知道如何揭示參與者表單?

我的代碼如下:

在我的JS形式的幫手,我有(其中隱藏了參與者嵌套形式,除非範圍的問題,詢問是否參與尋求爲true):

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

在我的範圍形式,我有:

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

謝謝

+0

我找到了一種方法,工程,那就是: – Mel

回答

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

你是目前只檢查該複選框是否在更改時被選中。但是,當窗體被加載並選中該框時,更改事件不會被觸發,因此您的代碼不會執行。

爲了使檢查運行在頁面加載時,加入這樣的事情您的JS(原諒我JS,而不是CoffeeScript的寫它):

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

請注意,您不需要其他部分支票在這裏,因爲默認是隱藏#participationrequest元素。

+0

你好,非常感謝您的幫助。恐怕不適合我 - 在創建或更新模式。 – Mel

+0

檢查JS控制檯是否有錯誤。也許選擇器'$('#'+ inString +'_scope_attributes_if_participant')'不正確?或者可能在頁面準備好後通過ajax加載表單的那部分,以便元素在document.ready中還不存在? – tbrisker

0

試試這個:

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