Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在客户端添加列表项_Javascript_Ruby On Rails - Fatal编程技术网

Javascript 在客户端添加列表项

Javascript 在客户端添加列表项,javascript,ruby-on-rails,Javascript,Ruby On Rails,我会马上说,我是Rails的完全初学者,所以这可能是我明显缺少的东西 我有一个用于编辑无序()问题列表的web表单。每个问题都是列表中的一项。每个问题都有一个用于问题文本的文本字段和一个下拉列表,用于指示问题的类型(多选、对/错等) 我还想让用户能够添加新的问题,方法是单击一个链接,并在列表中显示一个新的文本框和下拉列表 我还没有找到一个真正干净的方法来做到这一点,所以我从各种教程中拼凑了一些。有没有更好的方法我错过了 下面是edit.html.erb的代码: <h1>Editing

我会马上说,我是Rails的完全初学者,所以这可能是我明显缺少的东西

我有一个用于编辑无序(
)问题列表的web表单。每个问题都是列表中的一项。每个问题都有一个用于问题文本的文本字段和一个下拉列表,用于指示问题的类型(多选、对/错等)

我还想让用户能够添加新的问题,方法是单击一个链接,并在列表中显示一个新的文本框和下拉列表

我还没有找到一个真正干净的方法来做到这一点,所以我从各种教程中拼凑了一些。有没有更好的方法我错过了

下面是edit.html.erb的代码:

<h1>Editing Survey: <%= "#{@survey.name}" -%></h1>

<% form_for @survey, :url => {:action => 'update', :id => params[:id]} do |survey_form| %>
  <h2>Title: <%= survey_form.text_field :name %></h2>
  <ol class='question_list'>
  <% for @question in @survey.questions %>
    <% fields_for "question[]" do |f| %>
      <li>
      <%= f.text_field :q_text %><br>
      <%= select(:question, :q_type, { "True/False" => "T", "Multiple Choice" => "M"}) %><br>
      </li>
    <% end %>
  <% end %>
  </ol>
  <%=
    link_to_function "Add another question",
                     update_page {  |page|
                        page.insert_html :bottom, 
                        'blank_question', 
                        (render :partial => 'blank_question', :object => @question ) 
                     }

  %>
  <%= submit_tag "Update" %><br>
<% end %> <% "End of form_for" %>

<%= link_to "Back", {:action => 'list' } %>
编辑调查:
{:action=>update',:id=>params[:id]}do | survey|u form |%>
标题:

  • “T”,“多项选择”=>“M”})%>
  • '空白问题',:object=>@question) } %>
    '列表'}%>
    我创建了另一个名为_blank_question.erb的erb文件,这是我希望在他们单击“添加另一个问题”链接时包含的元素:

  • 25%>
    “T”,“多项选择”=>“M”})%>
  • 问题是,当我点击“添加另一个问题”链接时,在弹出窗口中出现以下错误

    RJS错误:

    TypeError:对象函数元素(){ [本机代码]}没有方法“插入”[本机代码]}没有方法“插入”


    很多谷歌搜索都没有发现任何有用的结果。你知道我哪里出错了吗?

    如果你使用的是Rails版本>2.3(如果你不使用,我建议你使用),你可以观看两个屏幕广播:

    这正好解释了你想做什么。第二部分涉及Ajax部分,但我真的建议您同时观看第一部分和第二部分,因为这是逐步构建的,它将真正帮助您澄清很多事情

    一般来说,该网站是了解许多简单或复杂Rails内容的最佳途径之一。

    一些提示:

    似乎没有可以插入呈现HTML的元素“blank_question”。您可能希望在父元素中插入:

    update_page do |page|
      page['parent'].insert_html :bottom, :partial => 'blank_question',
                                          :object => @survey.questions.build
    end
    
    或者更简单的方法是让Rails决定使用哪个部分:

    update_page {|page| page['parent'].insert_html :bottom, @survey.questions.build }
    
    这将尝试使用“_question.html.erb”将一个已与您的调查关联的空问题作为局部变量“question”传递,此外,您还可以共享用于呈现现有问题和新问题的部分(见下文)

    顺便说一句:看看如何直接跳过渲染调用(并让Rails为您的调查构建空问题)

    另一个顺便说一句:你可以像这样将集合传递给
    字段(它会自动循环,你可以跳过for循环):

    然而,这只适用于
    类调查;有很多问题
    。但情况可能就是这样<父窗体上使用的
    的代码>字段\u也支持数据库中尚未出现的新对象-这可能对您有用(也称为“空白问题”)。此外,您还可以对@survey do | survey |表单|使用
    表单|。Rails将足够智能,可以根据数据库中是否存在对象来使用更新或创建URL。Rails为此使用
    new\u record?
    方法

    上述附录-共享部分,然后使用:

    survey_form.fields_for :questions {|f| render f.object }
    
    这将为每个集合成员呈现“_question.html.erb”

    我通常使用助手来呈现此类嵌套表单:

    module SurveysHelper
      def setup_survey(s)
        # add empty question to survey if none associated
        s.questions.build unless s.questions.size > 0
        return s
      end
    end
    
    并且认为:

    form_for setup_survey(@survey) do |survey|
      survey.fields_for :questions {|f| render f.object }
    end
    

    确保prototype.js包含在rails的javascript目录中,并且您正在将其导入到标题中:

    谢谢您的建议。看来我前面还有一些书要读。很抱歉,我花了一段时间才恢复阅读。这是一个侧面的项目,我只有这么多的时间来研究它。谢谢大家的帮助!
    module SurveysHelper
      def setup_survey(s)
        # add empty question to survey if none associated
        s.questions.build unless s.questions.size > 0
        return s
      end
    end
    
    form_for setup_survey(@survey) do |survey|
      survey.fields_for :questions {|f| render f.object }
    end