के साथ एक अंतहीन स्क्रॉल को कार्यान्वित करना मैं अपनी परियोजना पर एक अंतहीन स्क्रॉल को लागू करने की कोशिश कर रहा हूं। मैं रेलस्कास्ट #114 Endless Page और this का मिश्रण उपयोग कर रहा हूं।रेल 3 और Jquery
जब भी पृष्ठ समाप्त होता है तो अनुरोध भेजने को रोकने का प्रयास करते समय सबकुछ अजीब व्यवहार के अलावा ठीक काम करता है।
अब तक मेरे पास है:
नियंत्रक:
def show
@title = Photoset.find(params[:id]).name
@photos = Photoset.find(params[:id]).photo.paginate(:page => params[:page], :per_page => 20)
respond_to do |format|
format.js
format.html
end
end
Show.html.erb:
<% content_for :body_class, '' %>
<%= render 'shared/header' %>
<div id="photos_container">
<div id="photos_header">
<h2><%= @title %></h2>
</div>
<%= render :partial => 'photo', :collection => @photos %>
</div>
<%= render :partial => 'endless_scroll' %>
जावास्क्रिप्ट (आंशिक के माध्यम से भरी हुई):
<script type="text/javascript">
(function() {
var page = 1,
loading = false,
finish = false;
function nearBottomOfPage() {
return $(window).scrollTop() > $(document).height() - $(window).height() - 200;
}
function finish() {
finish = true;
}
$(window).scroll(function(){
if (loading) {
return;
}
if(nearBottomOfPage() && !finish) {
loading=true;
page++;
$.ajax({
url: '/photosets/<%= params[:id] %>?page=' + page,
type: 'get',
dataType: 'script',
success: function() {
loading=false;
}
});
}
});
}());
</script>
शो .js.erb
$("#photos_container").append("<%= escape_javascript(render :partial => 'photo', :collection => @photos) %>");
<% if @photos.total_pages == params[:page].to_i() %>
page.call 'finish'
<% end %>
आप देख सकते हैं, मेरे show.js.erb
पर मैं एक page.call
कि finish
चर को सच प्रदान करती है। यह अनुरोध रोकता है।
वायर्ड चीज यह है कि यह अंतिम पृष्ठ कभी लोड नहीं करता है। @photos.total_pages == params[:page].to_i()
केवल finish
को कॉल करने और चर को true
पर सेट करने के बजाय, यह $("#photos_container").append("<%= escape_javascript(render :partial => 'photo', :collection => @photos) %>");
को चलने से भी रोक रहा है।
यह नियंत्रक को अनुरोध भेजता है, एसक्यूएल चलाता है लेकिन अंतिम पृष्ठ को जोड़ता नहीं है।
यदि मैं @photos.total_pages < params[:page].to_i()
पर स्थिति बदलता हूं तो यह काम करता है, लेकिन उस पृष्ठ पर अतिरिक्त अनुरोध भेजता है जो मौजूद नहीं है।
मैं अपने कार्यान्वयन पर किसी भी मदद की सराहना करता हूं। मुझे यकीन नहीं है कि इसे पूरा करने के लिए पर्याप्त (रेल) तरीका है या नहीं।
मैं रेल पता नहीं है, लेकिन आम तौर पैरामीटर नहीं है [: पृष्ठ] .to_i() शून्य-आधारित इंडेक्स? तो अगर पैराम्स [: पेज] .to_i() उदाहरण 5 के लिए है, तो photos.total_pages 6 (पेज 0-5) होंगे। – Simon
क्या आपने पिछले पृष्ठ पर '@ photos' चर का निरीक्षण किया है? मुझे लगता है कि यह कुछ भी नहीं जोड़ रहा है क्योंकि संग्रह पिछले पृष्ठ पर खाली है। आपके द्वारा चिपकाए गए किसी भी कोड द्वारा 'फिनिश' वेरिएबल का उपयोग नहीं किया जाता है, लेकिन मुझे नहीं लगता कि यह संबंधित है। – Draiken
आपके AJAX कॉल में आपके पास सफलता विधि है जहां आप केवल लोडिंग को गलत पर सेट करते हैं। प्रतिक्रिया कहां जाती है? यदि इसे डीओएम में इंजेक्शन नहीं दिया गया है तो परिवर्तनीय नहीं बदला जाएगा। – Zefiryn