使用轨道3上的ruby在另一个局部视图中渲染视图时出现问题

时间:2012-09-06 13:37:41

标签: ruby-on-rails-3 jquery pagination render

我试图在不使用菜单的任何分页宝石(就像模板)的情况下进行ajax分页。例如,在品牌菜单名称鼠标悬停时使用“menu_brand”渲染显示品牌菜单,因为当时页面加载时只从数据库中获取品牌。对于这个渲染视图,我必须做分页功能。我在控制台日志中成功获取当前页面内容。

在控制器中这样做

def menu_brand
    $cnt=Brand.count
end

def menu_brand_page
    $st=0
    if !(params[:startingRow].nil?)
        $st = params[:startingRow].to_i
    end
    $brands=Brand.limit(24).offset($st)
end

在_menu_brand.html.erb

<% if !($cnt.nil?) %>
<% @pg = ($cnt / 24).ceil %>

<div class="paginator">
    <%
    for j in 0..@pg %>
    <%= link_to "#{j+1}", "javascript:GotoPage('#{j*24}')",  %>
    <% end
    %>
</div>
<table width="700px"; align="center" id="menupage">
    <%= render "menu_brand_page"%>
</table>
<% end %>
<script type="text/javascript">
    function GotoPage(startrow) {
var theURL = '/menu_brand_page/'+<%= params[:deptid] %>
    +'/' + startrow;
    $.ajax({
        url : theURL
    });
    }
</script>

在menu_brand.js.erb

$('#bval').html('<%= escape_javascript render ('menu_brand') %>');

在_menu_brand_page.html.erb

<% $brands.each do |brand| %>
    <%= brand.name %>
<% end %>

在menu_brand_page.js.erb

$('#menupage').html('<%= escape_javascript render ('menu_brand_page') %>');

布局

<div id="bval">
<%= render "menu_brand" %>
</div>
<script type="text/javascript">
$(document).ready(function() {
var theBrand = '/menu_brand/' + <%= params[:deptid] %>;
$.ajax({
url : theBrand
});
});
</script>

我的router.rb

match "menu_brand_page/:deptid/:startingRow" => "product_details#menu_brand_page"
match "menu_brand/:deptid" => 'product_details#menu_brand'

控制台日志输出

$('#menupage')。html('\ n \ n \ nBC \ n&lt; / td&gt; \ n \ n \ nBC Footwear \ n&lt; / td&gt; \ n \ n \ nBCBG \ n&lt; / td&gt; ; \ n&lt; / tr&gt; \ n \ n \ n \ n \ nBCBGeneration \ n&lt; / td&gt; \ n \ n \ nBCBGMAXAZRIA \ n&lt; / td&gt; \ n \ n \ n \ nBCX \ n&lt; / td&gt; \ n&lt; / tr&gt; ; \ n \ n \ n \ n创作\ n&lt; / td&gt; \ n \ n \ nBeach Bunny \ n&lt; / td&gt; \ n \ n \ nBeach House \ n&lt; / td&gt; \ n&lt; / tr&gt; \ n \ n \ n \ n每个House Woman \ n&lt; / td&gt; \ n \ n \ nbebe \ n&lt; / td&gt; \ n \ n \ nBecca \ n&lt; / td&gt; \ n&lt; / tr&gt; \ n \ n \ n \ nBed Stu \ n&lt; / td&gt; \ n \ n \ nBellatrix \ n&lt; / td&gt; \ n \ n \ nBELLE由SIGERSON MORRISON \ n&lt; / td&gt; \ n&lt; / tr&gt; \ n \ n \ n \ n \ nBelle Du Jour \ n&lt; / td&gt; \ n \ n \ n贝尔诺尔\ n&lt; / td&gt; \ n \ n \ nBen Amun \ n&lt; / td&gt; \ n&lt; / tr&gt; \ n \ n \ n \ n \ nENCH \ n&lt ; / td&gt; \ n \ n \ nBerek \ n&lt; / td&gt; \ n \ n \ nBernardo \ n&lt; / td&gt; \ n&lt; / tr&gt; \ n \ n \ n \ nNENNIE OF NEW YORK \ n&lt; / td&gt; ; \ n \ n \ nBETMAR \ n&lt; / td&gt; \ n \ n \ nBetsey Johnson \ n&lt; / td&gt; \ n&lt; / tr&gt; \ n \ n');

请帮助我,不知道为什么menu_brand视图中的内容没有变化。

1 个答案:

答案 0 :(得分:0)

谢谢@agncleod。 @agmcleod是对的。我在文档就绪函数中调用了render,并且我已经使用了很多全局变量。现在渲染鼠标悬停事件并使用实例变量。我纠正了这个错误。我已将所有全局($)变量更改为实例(@)变量。在布局中调用渲染函数,如下所述。

布局

<a href="#" id="menubrand">brands</a>
<div id="bval">
<%= render "menu_brand" %>
</div>
<script type="text/javascript">
$("a#menubrand").hover(function () {
var theBrand = '/menu_brand/' + <%= params[:deptid] %>;
$.ajax({
url : theBrand
});
},
function () {
});
</script>