【问题标题】:Render partial for each element in list using Rails unobtrusive javascript使用 Rails 不显眼的 javascript 为列表中的每个元素呈现部分内容
【发布时间】:2013-02-21 20:53:49
【问题描述】:

我的控制器返回一个用户列表并呈现一个 javascript 文件(不显眼的 javascript)。我想遍历该用户列表并将每个用户的部分呈现到 div 中。我有以下代码:

查看:

<div id="searched-users-div"></div>

控制器返回的.js文件

$('#searched-users-div').html(
    "<%= 
        if @searched_users and @searched_users.length > 0
            @searched_users.each do |user|
                escape_javascript(render(:partial => "shared/user_block", :locals => { :user => user }))
            end
        end
    %>");

将其打印到 div:

[#<User id: 1, name:...>]

这似乎不起作用。它似乎只是在 div 内将数组打印为纯文本,没有 html 或任何内容。有没有办法遍历 @searched_users 数组并为每个数组渲染一个部分?

或者我应该只创建一个接受 searched_users 数组的新部分,然后在其中循环遍历它?

【问题讨论】:

  • 您能否阐明“未通过第一次渲染”的意思 - 您是否看到错误?
  • 抱歉,更新了我的帖子。它将数组打印为 div 内的纯文本。

标签: ruby-on-rails ruby ruby-on-rails-3 unobtrusive-javascript


【解决方案1】:

删除嵌入 ruby​​ 标记前后的引号("&lt;%=%&gt;" 应该是 &lt;%=%&gt;)。并使用mapjoin 连接多个渲染:

$('#searched-users-div').html(
    <%= j(if @searched_users
            @searched_users.map do |user|
              render(:partial => "shared/user_block", :locals => { :user => user })
            end.join("\n")
          else
            ''
          end) %>);

【讨论】:

  • 您可能还想移动条件和循环来处理@searched_usersnil 的情况,否则您将调用.html(nil)(或.html() 没有内容)。
猜你喜欢
  • 2014-04-09
  • 2011-03-09
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多