1

自动分页无限滚动脚本有一个名为offset. 我想将它传递给scrollPagination方法(当它再次被调用时),但我不知道该怎么做。

我需要这样做,因为该部分offset内的变量会发生变化afterLoad,而现在offsetforcontentPage参数始终为 0。

var offset = 0;
$('#stuffhere').scrollPagination({ 
    'contentPage': 'themes/[var.theme]/ajaxcontrols.php?page=products&offset='+offset, // the page where you are searching for results
    },
    'afterLoad': function(elementsLoaded, offset){ // after loading, some function to animate results and hide a preloader div
         offset = offset + [var.homelist]; alert(offset);
    }
});

代码示例被修剪。

更新

这是我得到的结果。 偏移量仍然为零

确实知道变量范围。我想将变量传递offset.scrollPagination({,只是不知道该怎么做。使用.scrollPagination function(offset){不起作用。

4

2 回答 2

4

更好的是......在加载之前使用,删除原始的 contentPage 字符串。否则搜索将经常重复。例子:

    'beforeLoad': function(){ // before load function, you can display a preloader div
        $('#loading').fadeIn();         
         offset += 10;  
         this.contentPage = "democontent.php?offset=" + offset;
    },

更新

你知道,我认为在这种情况下实际上有一个更简单的解决方案,不需要破解插件甚至猴子补丁:

// Inside afterLoad

offset += 8;

this.contentPage = "..." + offset;

我刚刚注意到它afterLoad被称为 as opts.afterLoad,在这种情况下应该绑定thisopts函数内部。

原始答案

好的,在我看来,您最初传递给 ScrollPagination 插件的 URL 用于每个请求,而不是暴露在外部以便您在请求之间进行更改(例如,在您的 ScrollPagination 中afterLoad)。您可以破解插件以允许这样做,或者使用新的对其进行猴子补丁loadContent(),例如:

var offset = 0;

var loadContent = $.fn.scrollPagination.loadContent;

$.fn.scrollPagination.loadContent = function ( obj, opts ) {

  opts.contentPage = 'themes/jessicatheme/ajaxcontrols.php?page=products&offset=' + offset;

  return loadContent.call( this, obj, opts );

};


$( '#stuffhere' ).scrollPagination({

...

我会考虑联系插件作者,看看他们是否会在 MIT 或 Simplified BSD 许可下发布它,以便可以修改和分发它。

于 2012-05-23T00:51:39.723 回答
1

使用 JavaScript 闭包你不需要显式地传递它。在定义函数时处于范围内的变量将在该函数闭包中并且可以被引用。如果您想了解更多关于闭包的信息(它们并不像您想象的那么复杂),请阅读这篇文章。很好:JavaScript 闭包是如何工作的?

var offset = 0;
$('#stuffhere').scrollPagination({ 
  'contentPage': 'themes/[var.theme]/ajaxcontrols.php?page=products&offset='+offset,
  }
  ,'afterLoad': function(elementsLoaded){ 
     // offset will reference to the variable in the beginning of this script. It will be shared by all afterLoad invokes. Not sure if that is what you want
     offset = offset + [var.homelist];
     alert(offset);
  }
});
于 2012-05-21T20:38:02.313 回答