Jquery.html显示文字代码而不是在application.js中呈现html

时间:2013-03-21 08:53:18

标签: javascript jquery ruby-on-rails

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

这可能是一个简单的问题 - 我会很感激。

2 个答案:

答案 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();
  });
});