1

jqueryを使用してdivを拡張しようとしています。拡張機能は NunoEstradaViewer と呼ばれ、コードのサンプルは次のとおりです。

(function ($){

NunoEstradaViwer: {
  settings: {
     total: 0,
     format: "",
     num: 0;
  },
  init: function (el, options) {
   if (!el.length) { return false; }
        this.options = $.extend({}, this.settings, options);
        this.itemIndex =0;
        this.container = el;

        this.total = this.options.total;
        this.format = ".svg";
        this.num = 0;
  },
  generateHtml: function(){
   /*GENERATE SOME HTML*/

  $("#container").scroll(function(){
        this.num++;
        this.nextImage;
  })
  },
  nextImage: function(){

  /*DO SOMETHING*/

  }
});

私の問題は、this.num の値にアクセスし、スクロール イベントのハンドラー関数内で関数 this.nextImage を呼び出す必要があることですが、オブジェクト「this」はスクロールを参照し、「NunoEstradaViewer」を参照しません。これらの要素にアクセスするにはどうすればよいですか?

ありがとうございました

4

2 に答える 2

2

通常、この場合に行うことは、「this」への参照を変数に保存することです。

generateHtml: function(){
    /*GENERATE SOME HTML*/

    var self = this;

    $("#container").scroll(function(){
        self.num++;
        self.nextImage;
    })
}
于 2012-05-18T14:41:58.423 に答える
1

一般的な解決策は、目的のコンテキストへの参照を保存することです。

(function () {
    var self;
    self = this;
    $('#container').scroll(function () {
        self.doStuff();
    });
}());

別の方法は、コンテキストを関数に渡すことです。

(function () {
    $('#container').scroll({context: this, ..more data to pass..}, function (e) {
        e.data.context.doStuff();
    });
    //alternatively, if you're not passing any additional data:
    $('#container').scroll(this, function (e) {
        e.data.doStuff();
    });
}());
于 2012-05-18T14:50:39.883 に答える