Rails 想在 Kaminari 里面加上一个 Goto 直接跳转到某一页

sitoto · 2012年04月18日 · 最后由 sitoto 回复于 2013年04月22日 · 4444 次阅读

目前用 Kaminari 分页插件,有时候页数比较多,想加上一个 Goto 直接跳转到某一页,但是不知道怎么实现。请指点一下。

刚刚又看了下 edit the partials in your app's app/views/kaminari/ directory. 更改这个应该可以搞定,正在努力中。。。

也遇到这个需求。 我是模仿源码中的如下代码新建了一个 jump_tag 方法:

%w[first_page prev_page next_page last_page gap].each do |tag|
  eval <<-DEF
    def #{tag}_tag
      @last = #{tag.classify}.new @template, @options
    end
  DEF
end

然后建立一个app/views/kaminari/_jump_tag.html.erb模板,配合js实现跳转或ajax请求。

@helloqidi 我做法 土一些 直接更改了:app / views / kaminari / _paginator.html.erb

在里面加了 goto 的语句

<%= paginator.render do -%>
<nav class="pagination round">
  <%= prev_page_tag -%>
  <% each_page do |page| -%>
  <% if page.left_outer? || page.right_outer? || page.inside_window? -%>
  <%= page_tag page -%>
  <% elsif !page.was_truncated? -%>
  <%= gap_tag -%>
  <% end -%>
  <% end -%>
  <%= next_page_tag -%>
  <% $id += 1
  $id = 1 if $id > 100%>

  直接到<input type="text" maxlength="5" size="3" id="<%= "page#{$id}" %>" />页
  <input type="submit" onclick="<%= "page#{$id}()" %>" value="Go"/>
  <script type="text/javascript">
    function <%= "page#{$id}()" %>
    {
      page = document.all('<%= "page#{$id}" %>').value ;
      total = <%= num_pages %>  ;
        if(isNaN(page))
        {
            alert('请输入一个数值!');
            return;
        }
        else
        {
            page =parseInt(page);
            if(page < 1 || page > total)
            {
              alert('请输入一个在 1 和 ' + total + '之间的值!');
              return;
            }
        }
      var new_link = page;
      window.location.assign(new_link)
    }
  </script>
</nav>
<%- end -%>
<% $id += 1
  $id = 1 if $id > 100%>

关于这个 "page#{$id}"
$id 是个全局变量,使用一次 +1

因为一个页面里面可能存在多个 分页,就可能存在多个 goto,保持 id 不一样。

<input type="text" maxlength="5" size="3" id="<%= "page#{$id}" %>" />
需要 登录 后方可回复, 如果你还没有账号请 注册新账号