【问题标题】:Simple Form - Rails 4 - editing简单形式 - Rails 4 - 编辑
【发布时间】:2015-06-02 05:29:51
【问题描述】:

我正在尝试在我的 rails 4 应用中使用简单的表单。

我有一个项目模型,它有一个范围模型。范围属于项目。我有第三个模型,称为参与者,它属于范围。范围接受参与者的嵌套属性,项目接受范围的嵌套属性。

当我创建一个新项目时,我的表单有部分是每个范围和参与者的嵌套表单。在我的范围表中,我询问该项目是否涉及参与者。如果答案是真的,我会使用 JS 表单助手来显示包含参与者表单的隐藏部分。

如果在创建项目后我想对其进行编辑,编辑功能会将我返回到项目表单,该表单显示参与者复选框(为真),但隐藏参与者表单。

我的问题是,如果参与者复选框被选中为真,那么嵌套在项目表单中的参与者表单应该被显示出来。我的 JS 表单助手隐藏此表单,直到该框被选中为真,这在创建模式下工作正常,但我需要取消选中范围表单中的参与者框并重新选中它以显示参与者表单 -以便我可以编辑这些字段。

如果询问参与的范围问题是真实的,而无需取消选中并重新选中表单,您是否知道如何显示参与者表单?

我的代码如下:

在我的 JS 表单助手中,我有(隐藏参与者嵌套表单,除非询问是否寻求参与的范围问题是真的):

$(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' %>

谢谢

【问题讨论】:

  • 我找到了一种可行的方法,即:

标签: javascript ruby-on-rails simple-form


【解决方案1】:
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()

【讨论】:

    【解决方案2】:

    您目前只检查复选框是否在更改时被选中。然而,当表单被选中并加载时,不会触发更改事件,因此您的代码不会执行。

    要在页面加载时运行检查,请在您的 JS 中添加类似这样的内容(请原谅我用 JS 而非咖啡脚本编写):

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

    请注意,此处不需要检查的其他部分,因为默认情况下隐藏 #participationrequest 元素。

    【讨论】:

    • 您好,非常感谢您的帮助。恐怕这对我不起作用 - 在创建或更新模式下。
    • 检查 JS 控制台是否有错误。也许选择器$('#' + inString + '_scope_attributes_if_participant') 不正确?或者可能是在页面准备好后通过 ajax 加载表单的那一部分,这样元素在 document.ready 上还不存在?
    【解决方案3】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多