2011-04-20 10 views
7

Tôi đang cố gắng tạo phân đoạn "Twitter như" với nút "Thêm" để tải kết quả với Kaminari.Rails 3 - "Thêm" phân trang ajax với Kaminari

Tôi tìm thấy câu hỏi này here

Nhưng tôi không thể tìm ra cách để làm cho nó hoạt động và nếu đó là một cách tiếp cận tốt.

Cảm ơn trước

Trả lời

17

Bạn có nghĩa là bạn cần nút "thêm" không? Làm thế nào về việc tạo ra một người trợ giúp như thế này?

# usage: 
# link_to_next_page(@items) 
# link_to_next_page(@items, :remote => true) # Ajax 
def link_to_next_page(scope, name, options = {}, &block) 
    param_name = options.delete(:param_name) || Kaminari.config.param_name 
    link_to_unless scope.last_page?, name, {param_name => (scope.current_page + 1)}, options.merge(:rel => 'next') do 
    block.call if block 
    end 
end 

Tôi sẵn sàng đưa các phương thức trợ giúp này vào đá quý nếu bạn thấy nó hữu ích, vì vậy, hãy cho tôi biết suy nghĩ của bạn. Cảm ơn!

+0

Tuyệt vời, hoạt động tuyệt vời! Thật vậy nó sẽ hữu ích để có mà bao gồm trong đá quý. Nó sẽ bao gồm một loại rất hấp dẫn và nhiều hơn nữa và phổ biến hơn của pagination :) Cảm ơn! – invaino

+0

Xin chào, tôi đã bắt gặp điều này vì tôi đang cố tự mình tạo một nút "khác". Tôi thực sự mới với jquery và dường như không thể làm được gì. Bạn có thể giải thích làm thế nào phương pháp trợ giúp này có thể được nối với jquery để làm cho "thêm" nút? –

+0

Nút nhiều hơn là tuyệt vời nhưng để cho các mục trước đó vẫn còn và các mục tiếp theo nên được dưới các mục trước .. Tôi sẽ là tốt hơn – Uchenna

1

Hãy nhớ rằng link_to_next_page(@items, :remote => true) sẽ không hoạt động chính xác ngoài hộp. Vì nó không có cách nào để xác định trang hiện tại sau một yêu cầu Ajax, liên kết cần được thay thế sau khi các mục mới được tìm nạp. Sử dụng javascript không phô trương, này một cái gì đó sẽ trông như thế này:

# app/views/items/index.js.erb 
$(".items").append("<%= escape_javascript(render(@items)) %>"); 
$(".more_link").replaceWith("<%= escape_javascript(
    link_to_next_page @items, 'View more', 
         :remote => true, 
         :id  => :view_more) %>"); 

Nếu điều này không có ý nghĩa, hãy xem các Unobtrusive Javascript screencast tại Railscasts.