使用 Rails 不显眼的 javascript 为列表中的每个元素渲染部分

Render partial for each element in list using Rails unobtrusive javascript

提问人:dmoss18 提问时间:3/7/2013 最后编辑:dmoss18 更新时间:3/7/2013 访问量:933

问:

我的控制器返回用户列表并呈现一个 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数组的新部分,并在其中循环访问它?

Ruby-on-Rails Ruby-on-Rails-3 不显眼的javascript

评论

0赞 PinnyM 3/7/2013
您能澄清一下“没有通过第一次渲染”是什么意思吗 - 您是否看到错误?
0赞 dmoss18 3/7/2013
对不起,更新了我的帖子。它将数组打印为 div 中的纯文本。

答:

3赞 PinnyM 3/7/2013 #1

删除嵌入的 ruby 标记前后的引号(应为 和 )。并使用 with 连接多个渲染:"<%=%>"<%=%>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) %>);

评论

0赞 Jim Stewart 3/7/2013
您可能还想移动条件和循环来处理 where is 的情况,否则您将调用(或没有内容)。@searched_usersnil.html(nil).html()