[英]Creating RoR Links within Ajax call in .js.erb file
我有以下ajax调用,可在单击按钮时激活:
$.ajax({
url: button_action,
data: {},
type: "POST",
dataType: "json",
success: function( data ) {
var att = data.attendees
var attendee_list = "";
for (i = 0; i < data.attendees.length; i++) {
if ( i != att.length-1) {
attendee_list += att[i].first_name + " " + att[i].last_name + ", ";
} else {
attendee_list += att[i].first_name + " " + att[i].last_name
}
}
att_array.innerHTML = attendee_list;
}, . . .
});
现在,我们看到我从data.attendees
的服务器中获取了事件参与者的列表。 我可以获取每个与会者的名字和姓氏,并且可以轻松获得id = att[i].id
的与会者id = att[i].id
。 我不仅要显示每个与会者的姓名,还想使用其id
创建指向该与会者show
页面的链接 。 理想情况下,我将创建一个变量full_name = att[i].first_name + " " att[i].last_name
,然后创建一个类似
<%#= link_to full_name, user_path(user.id) %>
我知道这涉及获取json或javascript变量并在Ruby代码中使用它们,然后输出Ruby代码。 这可能吗?如果可以,我该怎么办?
通过简单的AJAX请求,您的操作方式是不可能的(通过设计)。 问题在于,Ruby代码首先呈现(因为它是服务器端的),而JavaScript呈现之后的。 因此,您实际上无法在Ruby方法中“注入” json,因为帮助程序link_to
将在服务器甚至请求JavaScript之前执行。
您想要使用的是非侵入式JavaScript(UJ)。 通过在链接上放入:remote => true
可以完成此操作。 这样做之后,请求将转到链接( attendees
)中放置的服务器端方法。 服务器端,您需要有一个respond_to
块:
def attendees
@attendees = Attendee.all #I'm making this up for the example
respond_to do |format|
format.js
end
end
然后,你需要一个.js.erb
动作后,即命名的文件attendees.js.erb
。 在服务器端执行时将调用它。 您将收到一系列物品。 您需要局部迭代它们。 这是您要执行的操作。 在attendees.js.erb
('.attendee-list-container').html("<%= j render(:partial => 'attendees_list', :locals => { :attendees => @attendees }) %>");
最后,您可以在_attendees_list.html.erb
中进行迭代并创建链接。
#in HAML:
-attendees.each do |attendee|
=link_to "#{attendee.first_name + ' ' + attendee_last_name}" , attendee
而已。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.