如何在javascript响应中包含html代码的字符串变量?

时间:2013-09-02 22:45:18

标签: jquery html ajax ruby-on-rails-4

在我的控制器的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

1 个答案:

答案 0 :(得分:0)

我以不同的方式解决了这个问题,一个更符合MVC约定的方法:控制器创建一个视图所需的所有数据的集合,但不会将其包装在HTML中。部分执行所有HTML包装。然后注意&lt;%...%&gt;之间的区别和&lt;%= ...%&gt;总是很聪明!