在我的控制器的show动作中,我们准备了一堆信息,用于构建一个html表,通过jquery替换表所在的div返回浏览器。
这一部分被解释为纯文本而未添加到表中。所以我对编码做错了,我收集了,但到目前为止我所尝试的并没有改善结果。
控制器的show动作,部分:
@shared_individuals = Individual.where(:address_id => params[:id]).order("birthdate ASC")
@typecodes = Contactmethods.select("Distinct typecode_desc, typecode_id")
@contact_methods = getem( @typecodes, @shared_individuals)
getem()是控制器中的函数,它为表格做了很多毛茸茸的排列和html编码,但为了简化尝试找出错误,它目前只是这样做:
def getem( @typecodes, @shared_individuals )
foo = "<tr><td>Testing</td></tr>"
return foo
end
控制器的show动作被称为AJAX事务,因此视图代码为show.js.erb:
$('#selected_family')
.replaceWith('<div id="selected_family">' +
'<%=j render partial: "addresses/selected_address", object: @selected_address %>' +
'<table border="1px" rules=all frame=box cellspacing="5" cellpadding="5">' +
'<tr>' +
'<th></th><%=j render partial: "review/first_names", collection: @shared_individuals %>' +
'</tr>' +
'<tr>' +
'<td><strong>Birthday</strong></td><%=j render partial: "review/birth_dates", collection: @birth_dates %>' +
'</tr>' +
'<tr>' +
'<td><strong>Phone</strong></td><%=j render partial: "review/phone_numbers", collection: @phone_numbers %>' +
'</tr>' +
'<tr>' +
'<td><strong>Email</strong></td><%=j render partial: "review/emails", collection: @emails %>' +
'</tr>' +
'<%=j @contact_methods %>' +
'</table>' +
'</div>')
.show("blind");
所以流程是show方法已经用一串HTML代码填充@contact_methods,我要求他们在javascript响应中插入HTML。
在浏览器中实际发生的是我们看到的表格
< tr>< td>Testing< /td>< /tr>
(html标签并没有真正的间隔,但我无法弄清楚如何让stackoverflow标记语言让他们独自一人) 然后表格正确表示,但不包含该行。
我试过了:
'<%=h @contact_methods %>' + #wasn't that from Rails 1.0?
'<%= @contact_methods %>' + #nothing shows up
我甚至尝试过:
'#{@contact_methods}' + #but of course that's silly in this context
为什么不:
@contact_methods + #that blows up the javascript processing
答案 0 :(得分:0)
我以不同的方式解决了这个问题,一个更符合MVC约定的方法:控制器创建一个视图所需的所有数据的集合,但不会将其包装在HTML中。部分执行所有HTML包装。然后注意&lt;%...%&gt;之间的区别和&lt;%= ...%&gt;总是很聪明!