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