2011-08-09 12 views
6

Estoy intentando crear un widget jQuery que se extiende desde ui.slider. Me gustaría tener un método personalizado que se ejecute en el evento 'slide'. He intentado anular la opción de los padres al igual que cuando se utiliza el widget deslizador normalmente, pero me encontré con este problema con alcances variables:La extensión del aparato UI de jQuery - cómo acceder a los padres de eventos

$.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); 
    } 
} 

¿Cómo puedo activar mi función en el caso de diapositivas y tener acceso a mi variable?

Editar: Enlace a ui.slider fuente: https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.slider.js

Editar: Solución

$.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); 
    } 
} 

Respuesta

9

En jQuery UI> = 1.9, puede utilizar el método _super lugar:

_slide: function() { 
    this._super(); 
    // equivalent to $.Widget.prototype._slide.call(this); 
} 

o superApply:

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