首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4 JavaScript/JQuery只对单行view.html.erb文件进行部分更新

Rails 4 JavaScript/JQuery只对单行view.html.erb文件进行部分更新
EN

Stack Overflow用户
提问于 2015-05-28 17:18:04
回答 1查看 69关注 0票数 0

我有一个控制器:

代码语言:javascript
复制
class RuleSearchController < ApplicationController
  def index

  end

  def results
    # Rule is a simple AR class with just a name column
    @rules = Rule.all
  end
end

我在index.html.erb里有一张搜索表格

代码语言:javascript
复制
<%= form_tag('/rule_search_results', :id => 'search_form', remote: true) do %>
  <%= submit_tag "Update" %>
<% end %>

<div id='search_results'>
  <%= render partial: "results" %>
</div>

然后,我有一个按照results.js.erb this answer添加的本地元素来传递我的搜索结果。

代码语言:javascript
复制
$('#search_results').html('<%= render partial: "results", locals: {rules: @rules} %>');

问题是,虽然以下内容适用于_results.html.erb文件:

代码语言:javascript
复制
<ul><% for rule in rules do %><li><%= rule.name %></li><% end %></ul>

以下代码相同,但在几行代码中没有:

代码语言:javascript
复制
<ul>
<% for rule in rules do %>
  <li><%= rule.name %></li>
<% end %>
</ul>

实际上,除了在_results.html.erb文件中使用一行之外,其他任何操作都不会导致任何事情发生。Chrome上的JS控制台没有错误,rails服务器正在运行的终端窗口没有错误,日志中也没有错误,它只是静悄悄地不起作用。

这个问题甚至发生在基本的HTML上,如果我把本地语言去掉,那也于事无补。

解决方案/解决办法是:

代码语言:javascript
复制
$('#search_results').html('<%= (render partial: "results", locals: {rules: @rules}).gsub("\n","").html_safe %>');

虽然神经学家对我最初的问题的回答是正确的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-28 17:25:55

这是因为javascript不允许跨多行拆分字符串。例如,以下是有效的javascript:

代码语言:javascript
复制
$('#search_results').html('<div>foo</div>');

但下列规定无效:

代码语言:javascript
复制
$('#search_results').html('<div>
foo
</div>');

如果您已经获得了部分HTML,那么为什么不首先将其呈现在正确的位置,然后为其样式设置display: none,然后在需要时使用jQuery来显示元素呢?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30513093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档