1

我在我的 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) %>'

这可能是一个简单的——我会很感激的。

4

2 回答 2

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(客户端)。

于 2013-03-21T08:57:45.077 回答
2

除了 Thomas 关于客户端和服务器端的解释,并假设您不必服务器发出另一个请求:最简单的方法是将部分放在视图中的隐藏 div 中,然后使用 jQuery显示它。

显示.html.erb:

<div style="display:none;" id="hidden_div">
  <%= render "restaurants/restaurant_reviewer_list", :venue => @restaurant, :limit => @restaurant.reviews.count %>
</div>

应用程序.js:

$(document).ready(function(){
  $("#more_reviewers").click(function(e){
    $("#hidden_div").show();
  });
});
于 2013-03-21T09:03:03.323 回答