1

自動ページネーションの無限スクロール スクリプトには、 という変数がありますoffsetscrollPaginationメソッドに(再度呼び出されたときのために)渡したいのですが、やり方がわかりません。

セクションoffset内で変数が変更されるため、これを行う必要があり、現在、パラメーターの は常に 0 です。afterLoadoffsetcontentPage

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この場合は、関数内にバインドする必要がthisありoptsます。

元の回答

わかりました。ScrollPagination プラグインに最初に渡す URL はすべてのリクエストに使用され、リクエスト間で変更できるように外部に公開されていないように見えます (例: 内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 または簡易 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 に答える