2011-08-09 27 views
6

ui.slider'dan başlayan bir jQuery widget'ı oluşturmaya çalışıyorum. 'Slayt' etkinliğinde yürüten özel bir yönteme sahip olmak isterim. Normalde kaydırıcı widget'ı kullanırken ebeveynin seçenek tıpkı geçersiz kılma çalıştı ama değişken kapsamları ile bu sorunu koştu:jquery ui widget'ını genişletme - üst olaya erişme

$.widget("ui.myslider", $.ui.slider, { 
    _create: function() { 
     this.foo = "bar"; 

     // Outputs "bar" 
     this._mySlide(); 

     // Outputs "undefined" when triggered 
     this.options.slide = this._mySlide; 

     $.ui.slider.prototype._create.apply(this, arguments); 
    }, 
    _mySlide: function() { 
     alert(this.foo); 
    } 
} 

nasıl slayt olayı benim fonksiyonunu tetiklemek VE benim değişkene erişebilir?

Düzenleme: Bağlantı ui.slider kaynak: https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.slider.js

Düzenleme: Çözüm

$.widget("ui.myslider", $.ui.slider, { 
    _create: function() { 
     $.ui.slider.prototype._create.apply(this, arguments); 
     this.foo = "bar"; 
    }, 
    _slide: function() { 
     $.ui.slider.prototype._slide.apply(this, arguments); 
     alert(this.foo); 
    } 
} 

cevap

9

jQuery UI> = 1.9, bunun yerine _super yöntemi kullanabilirsiniz:

veya superApply:

_slide: function() { 
    this._superApply(arguments); 
    // equivalent to $.Widget.prototype._slide.apply(this, arguments); 
}