2012-06-27 8 views
5

Ana sayfamda sonsuz kaydırma kullanan bir gönderi döngüsü var. Bir kullanıcı ajax ajax arama gibi ajax kullanarak bu döngüyü başka döngülerle değiştirebilir. Sorunum sonsuz kaydırma yalnızca ilk kez kullanıldığında, ana döngü için tetiklendiyse, yeni bir döngü ana değiştirdiğinde tekrar çalışmayacak. Yeni bir döngü eskinin yerini her değiştirdiğinde, aşağıdaki işlev yeniden yüklenir. Öyleyse sonsuz kaydırma sıfırlama işlemini nasıl yaparım ve yeni bir döngü çağrıldığında her zaman çalışırım?Yeni ajax içeriğiyle sonsuz kaydırma sıfırlaması nasıl yapılır

var href = 'first'; 
$(document).ready(function() { 
    $('#boxes').infinitescroll({ 
     navSelector: '.infinitescroll', 
     nextSelector: '.infinitescroll a', 
     itemSelector: '#boxes .box', 
     loadingImg: '<?php echo get_bloginfo('stylesheet_directory') ?>/images/loading.gif', 
     loadingText: 'Loading...', 
     donetext: 'No more pages to load.', 
     debug: false 
    }, function(arrayOfNewElems) { 
     $('#boxes').masonry('appended', $(arrayOfNewElems)); 
     if(href != $('.infinitescroll a').attr('href')) { 
      href = $('.infinitescroll a').attr('href'); 
     } 
    }); 
}); 

Ben wordpress sitesinde Pual Irish infinite scroll plugin son sürümünü 2.0b2.120519 kullanıyorum.

+1

sizin kod canlı örneğini görmek mümkün mü kırma? – rlemon

+0

Kapalı kapılar ardında bir beta site ama js sohbetinde sizin için bir bağlantı bıraktım. –

cevap

3

Kullanmakta olduğunuz eklentinin hangi sürümüne sahip olduğunuzdan% 100 emin değilim, ancak en son dağıtımı kontrol ettim ve bunu yapmak için iki yöntem uygulamanız gerekiyor.

İlk olarak ajax işlevinizde, destroy the session on success'a ihtiyacınız vardır.

$.ajax({ 
    url: 'path/to/something.ext', 
    success: function(data){ 
    //call the method to destroy the current infinitescroll session. 
    $('#boxes').infinitescroll('destroy'); 

    //insert the new data into the container from the_loop() call 
    $('#boxes').html(data); 

    //reinstantiate the container 
    $('#boxes').infinitescroll({      
     state: {            
     isDestroyed: false, 
     isDone: false       
     } 
    }); 

    //call the methods you need on the container again. 
    $('#boxes').infinitescroll({ 
     navSelector: '.infinitescroll', 
     nextSelector: '.infinitescroll a', 
     itemSelector: '#boxes .box', 
     loadingImg: '<?php echo get_bloginfo('stylesheet_directory') ?>/images/loading.gif', 
     loadingText: 'Loading...', 
     donetext: 'No more pages to load.', 
     debug: false 
    }, function(arrayOfNewElems) { 
     $('#boxes').masonry('appended', $(arrayOfNewElems)); 
     if(href != $('.infinitescroll a').attr('href')) { 
     href = $('.infinitescroll a').attr('href'); 
     } 
    }); 
    } 
}); 

Ayrıca buna, bir işlev bağlama yapmak ve unbind/kod yerine bir sürü tekrarlanan rebind ama açıkladık kodu bir kopyası + yapıştır çözüm olabilir ve olmalıdır.

+0

Bu çözümü görmüştüm ama işe yaramadı. Bunun için yolun ne olduğunu varsayalım ve bunun için 'belgeyi hazır' kullanmayacağınızı mı düşünüyorsunuz? –

+0

Merhaba @Ohgodwhy Komut dosyanızı kullanmaya çalışıyorum ama hata ayıklamada 'Uncaught TypeError:' 'null' appendTo 'yöntemini çağıramıyor. Aradığım divların orada olduğundan% 1000 eminim. Bu kodun en son sürümle çalışıp çalışmadığını biliyor musunuz? Teşekkür ederim! – Jaypee

+0

@Jaypee Hello. JQuery hakkında "null" üzerinde bir yöntemi çağırmamakla ilgili bir hata aldığınızda, seçicinizin başarısız olduğu anlamına gelir. Hangi kapasitede olursa olsun. Seçicinizin 'appendTo()' için kısaca ne olduğunu gösterebilir misin? – Ohgodwhy

1

Bunu yapabileceğimi düşünüyorum. Sayfamda , farklı sayfa yüklemek için farklı bir öğeyi tıklatmak için watt. Bu sayfa ayrıca infinitescroll olur.

 // creation 
     case 'object': 

      this.each(function() { 

       var instance = $.data(this, 'infinitescroll'); 

      /* if (instance) { 

        // update options of current instance 
        instance.update(options); 

       } else { 
      */ 
       $(this).removeData("infinitescroll"); 

       // initialize new instance 
       $.data(this, 'infinitescroll', new $.infinitescroll(options, callback, this)); 

     // } 

      }); 

i tarih kaldırılmasına ve yeni infinitescroll oluşturmak her zaman: bu yüzden aşağıda kaynağını değiştirin. bu yüzden her zaman ve her seçim iyi. Çağrı

$('#boxes').infinitescroll({      
       state: {            
        isDuringAjax: false, 
        isInvalidPage: false, 
      isDestroyed: false, 
      isDone: false, // For when it goes all the way through the archive. 
      isPaused: false, 
      currPage: 1 

       } 
      }); 
then 
$('#boxes').infinitescroll({ 
     navSelector: '.infinitescroll', 
     nextSelector: '.infinitescroll a', 
     itemSelector: '#boxes .box', 
     loadingImg: '<?php echo get_bloginfo('stylesheet_directory') ?>/images/loading.gif', 
     loadingText: 'Loading...', 
     donetext: 'No more pages to load.', 
     debug: false 
    }, function(arrayOfNewElems) { 
     $('#boxes').masonry('appended', $(arrayOfNewElems)); 
     if(href != $('.infinitescroll a').attr('href')) { 
     href = $('.infinitescroll a').attr('href'); 
     } 
    }); 

0

onun için

+0

Cevabınız, _why_ çalışmasını açıklayabilseydiniz çok daha iyi olurdu. – Ben