Rails 2.3.8 - 当框包含多个选项时,选择导致解析错误的框

时间:2011-03-15 16:30:03

标签: javascript jquery ruby-on-rails erb

有问题的应用程序利用jQuery来执行ajax请求,以便填充相关的选择框。我的控制器操作responds_to:js,在.js.erb文件中我有:

str += '<%= f.select field.name, list, {}, { :class => "list", :multiple => "multiple", :style => "size:8; width:100px;" } %>';

“list”的填充方式如下:

str += '<% list = @validation_model.lookup([field], @lookup) %>';

我是.append()把这个给了div。在.js.erb模板文件的末尾。但是,当“list”包含多个值时,模板的解析将失败。如果它为空,或者只包含一个值,则解析成功。

这是我遇到的错误,还是我做错了什么?请注意,这显示为解析错误而不是运行时错误,因此我无法准确确定Firebug或Safari Dev中的问题。

更新:这是.js.erb文件的完整代码。我用内联逻辑替换了“list”变量来检索数组。

str = '<% fields_for :mapapps do |f| %>';
<% for tf in @tag.tag_fields.find(:all, :order => :sequence) %>
    <% field = tf.parentfield %>
    <% if !@lookup.include?(field) %>
        $("#<%= field.name %>").remove();
    <% else %>
        <% next %>
    <% end %>
    str += '<div id="<%= field.name %>" class="floater">';
    str += '<label for="mapapps_<%= field.name %>"><%= field.label %></label>';
    str += '<%= f.select field.name, @validation_model.lookup([field], @lookup), {}, { :class => "list", :multiple => "multiple", :style => "size:8; width:100px;" } %>';
    str += '</div>';
<% end %>
str += '<% end %>'
$("#mfrsdiv").append(str);

2 个答案:

答案 0 :(得分:1)

我认为你的印象是,eruby项目可以附加到字符串中,并将在视图中计算。实际上,eruby项目是在.js.erb文件本身中计算的,然后附加到字符串中。在你的代码中,f必须是视图中的表单变量..在.js.erb文件中没有值。如果你真的想将这个select添加到表单中,你应该考虑使用Ajax。

答案 1 :(得分:0)

我让代码正常工作。我需要做的就是在调用f.select时放入“escape_javascript”。

str += '<%= escape_javascript(f.select field.name, @validation_model.lookup([field], @lookup), {}, { :class => "list", :multiple => "multiple", :style => "size:8; width:100px;" }) %>';

应该注意的是,上面我的问题中的代码仍然会因为rubyprince提到的原因而失败,但渲染问题本身是由escape_javascript解决的。