2013-10-23 34 views
1

我正在使用「scrollPagination」javascript進行ajax分頁。 這裏是一個代碼:如何擴展使用匿名函數創建的對象原型

(function($){ 
    $.fn.scrollFeedPagination = function(options) { 
     var opts = $.extend($.fn.scrollFeedPagination.defaults, options); 
     var target = opts.scrollTarget; 
     if (target == null){ 
      target = obj; 
     } 
     opts.scrollTarget = target; 

     return this.each(function() { 
      $.fn.scrollFeedPagination.init($(this), opts); 
     }); 
    }; 
    $.fn.stopScrollPagination = function(){ 
     return this.each(function() { 
      $(this).attr('scrollPagination', 'disabled'); 
     }); 
    }; 
    $.fn.scrollFeedPagination.loadContent = function(obj, opts){ 
     console.log(opts); 
     var target = opts.scrollTarget; 
     var mayLoadContent = ($(target)[0].scrollHeight - $(target).scrollTop()) == $(target).height(); 
     if (mayLoadContent){ 
      if (opts.beforeLoad != null){ 
       opts.beforeLoad(); 
      } 
      $(obj).children().attr('rel', 'loaded'); 
      $.ajax({ 
       type: 'POST', 
       url: opts.contentPage, 
       data: opts.contentData, 
       success: function(data){ 
        console.log(data); 
        console.log(1); 
        var selector = target.selector; 
        var response = $(data).find(selector).children(); 
        $(obj).append(response); 
        var objectsRendered = $(obj).children('[rel!=loaded]'); 
        if (opts.afterLoad != null){ 
         opts.afterLoad(objectsRendered);  
        } 
       }, 
       dataType: 'html' 
      }); 
     } 
    }; 

    $.fn.scrollFeedPagination.init = function(obj, opts){ 
     var target = opts.scrollTarget; 

     $(obj).attr('scrollPagination', 'enabled'); 
     $(target).scroll(function(event){ 
      if ($(obj).attr('scrollPagination') == 'enabled'){ 
       $.fn.scrollFeedPagination.loadContent(obj, opts);  
      } 
      else { 
       event.stopPropagation();  
      } 
     }); 
     $.fn.scrollFeedPagination.loadContent(obj, opts); 
    }; 
    $.fn.scrollFeedPagination.defaults = { 
     'contentPage' : null, 
     'contentData' : {}, 
     'beforeLoad': null, 
     'afterLoad': null , 
     'scrollTarget': null, 
     'heightOffset': 0   
    }; 
})(jQuery); 

它正常工作時,我itialize它在一個節點上。 但兩個節點互相干擾:

例如:

node1.pagination({ 
'contentPage': ajaxurl, 
    'contentData': { 
     action: 'chat_pagination', 
     'last_time' : last_time, 
    }, 
    'scrollTarget': node1, 
    'beforeLoad': function() {}, 
    'afterLoad': function(elementsLoaded) { 
     last_time = node1.children('div').last().data('last-id'); 
    } 
}); 

它的工作原理,但只要我初始化:LAST_TIMEBREAK的節點2和Ajax動作也一個又一個

node2.pagination({ 
'contentPage': ajaxurl, 
    'contentData': { 
     action: 'feeds_pagination', 
     'last_time' : last_time, 
    }, 
    'scrollTarget': node2, 
    'beforeLoad': function() {}, 
    'afterLoad': function(elementsLoaded) { 
     last_time = node2.children('div').last().data('last-id'); 
    } 
}); 

現在節點1更新'feeds_pagination'。

現在要解決這個問題,我需要有兩個scrollFeedPagination()實例; 是否可以用這樣的語法擴展?

+0

你的'last_time'變量在哪裏聲明?這似乎是你的錯,而不是圖書館的錯。 – Bergi

+0

'last_time'被正式聲明,我只是簡單地省略了那部分,並不重要,即使我發送node2與'last_time2'它將同時具有'last_time'和'last_time2' – CBeTJlu4ok

+0

哦,對,我雖然你是詢問'last_time'被錯誤更新。我現在看到你的問題。 – Bergi

回答

2
var opts = $.extend($.fn.scrollFeedPagination.defaults, options); 

注意到$.extend所述第一參數是得到延長(與來自自變量的其餘部分的對象的屬性)的對象,也就是return的函數的結果編輯。所以你基本上設置

var opts = $.fn.scrollFeedPagination.defaults 
// extend it then: 
$.extend(opts, options); 

正如你所看到的,你opts對象將是真正的同樣的事情,並延長它的第二次將覆蓋第一配置。相反,從一個新的空對象開始,首先用默認值和選項參數擴展它:

var opts = $.extend({}, $.fn.scrollFeedPagination.defaults, options); 
+0

狗屎我不能這樣做:DI嘗試了很多變化,但從來沒有undestood如何開始)我聲明'VAR選項'這是我寫在scrollFeedPagination()內的一切,然後我做\t \t \t \t'var opts = $ .extend {},$ .fn.scrollFeedPagination.defaults,options);' – CBeTJlu4ok

+0

哦,你的意思是我需要修改庫嗎? – CBeTJlu4ok

+0

我從來沒有設法做到這一點:(你能請你用真實的例子更新你的答案嗎? – CBeTJlu4ok

相關問題