我在rails application.js文件中实现了以下代码。当用户点击链接时,视图将重新加载一个完整的审阅者列表,而不是前4个:
$(document).ready(function(){
$("#more_reviewers").click(function(e){
$("#reviewer_list").html('<%= escape_javascript(render "restaurants/restaurant_reviewer_list", :venue => @restaurant, :limit => @restaurant.reviews.count) %>');
});
});
问题:代码不是向我显示列表,而是将Rails代码作为文本返回。所以在我的屏幕上,我没有看到用户列表,而是看到:
'<%= escape_javascript(render "restaurants/restaurant_reviewer_list", :venue => @restaurant, :limit => @restaurant.reviews.count) %>'
这可能是一个简单的问题 - 我会很感激。
答案 0 :(得分:6)
Rails是一种服务器端编程语言。 Javascript是客户端。您无法将ruby代码动态地放入您的网站客户端,因为它需要首先在服务器上运行。
您必须创建一个运行此行的rails脚本
<%= escape_javascript(render "restaurants/restaurant_reviewer_list", :venue => @restaurant, :limit => @restaurant.reviews.count) %>
然后使用load()
例如:
$(document).ready(function(){
$("#more_reviewers").click(function(e){
$("#reviewer_list").load('http://url.to/the/script/you/made');
});
});
这样服务器就会发送一个脚本请求,它运行脚本(服务器端)并将输出(html)传递给javascript(客户端),在那里可以呈现它。
答案 1 :(得分:2)
除了Thomas对客户端和服务器端的解释之外,并且假设您不必须向服务器发出另一个请求:最简单的方法是将部分请求放入在视图中隐藏div,然后使用jQuery显示它。
show.html.erb:
<div style="display:none;" id="hidden_div">
<%= render "restaurants/restaurant_reviewer_list", :venue => @restaurant, :limit => @restaurant.reviews.count %>
</div>
的application.js:
$(document).ready(function(){
$("#more_reviewers").click(function(e){
$("#hidden_div").show();
});
});