【问题标题】:Rails 2.3.8 - select box causing parse error when box contains more than one optionRails 2.3.8 - 当框包含多个选项时,选择框会导致解析错误
【发布时间】:2011-03-15 16:30:03
【问题描述】:

有问题的应用程序利用 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) %>';

我正在将它附加到一个 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);

【问题讨论】:

  • 完整视图代码可能会有所帮助。在您的第二行代码中,您实际上是在 ERb 标记中分配列表变量,该标记不会在 javascript 变量分配中输出任何内容。
  • 我注意到的一个关键区别是,当数组中有多个值时,Rails 在选择中的每个“选项”元素后放置一个回车符。这会导致解析错误吗?

标签: javascript jquery ruby-on-rails erb


【解决方案1】:

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

【讨论】:

  • 但它可以工作,至少在 2.3.8 中。等等,first 框起作用了。因为它被正确渲染。我敢打赌你是对的,我即将在第二个框中遇到错误。
【解决方案2】:

我得到了代码工作。我需要做的就是将“escape_javascript”放在对 f.select 的调用周围。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2015-08-16
    • 1970-01-01
    • 2018-04-01
    • 2011-02-13
    相关资源
    最近更新 更多