No se puede leer la propiedad 'url' de undefined. El widget de carga de jQuery falla
Frecuentes
Visto 4,055 veces
1
Estoy tratando de crear un widget en jQuery para manejar la carga de contenido en ciertos divs en una página. La razón por la que estoy haciendo esto es para mantener mi código SECO. Tal vez debería mencionar que uso HeadJS para cargar javascript.
Este es el código de mi widget:
(function ($, window, document, undefined) {
$.widget ("my.contentloader", {
options: {
loadingMessage: true,
errorDiv: '#error',
contentDiv: '#content'
},
_create: function () {
$.ajax ({
type: "POST",
url: self.options.url,
data: {limit: self.options.params.limit, offset: self.options.params.offset},
beforeSend: function (html) {
// Check if loading message should be displayed
if (self.options.loadingMessage) {
$(self.options.contentDiv).html ("<div id='loading'>Loading</div>");
}
},
success: function (html) {
if (self.options.loadingMessage) {
$('#loading').remove ();
}
$(self.options.contentDiv).html (html);
},
error: function (html) {
$(self.options.errorDiv).html (html);
}
});
},
_setOption: function (key, value) {
this.options[key] = value;
$.Widget.prototype._setOption.apply (this, arguments);
}
});
})(jQuery, window, document);
Incluyo este archivo de widget y jquery en la página de llamadas. Entonces uso el complemento así:
$(window).contentloader ({
url: 'loading/content/url'
});
El problema es que me sale este error:
Uncaught TypeError: Cannot read property 'url' of undefined
1 Respuestas
2
No estas definiendo self
en cualquier lugar para que estés recibiendo window.self
en cambio y eso es
una referencia de objeto al objeto ventana.
y eso no tiene un options
propiedad. deberías estar usando this
en lugar de self
; si necesita forzar un determinado this
en sus devoluciones de llamada, luego haga lo siguiente:
var _this = this; // or 'var that'
antes de definir las devoluciones de llamada y el uso _this
(o that
):
_create: function () {
var _this = this;
$.ajax ({
// ...
beforeSend: function (html) {
if (_this.options.loadingMessage) {
//...
La presencia de los window.self
hace var self
una mala elección de nombre.
Respondido 27 ago 13, 18:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas jquery widget or haz tu propia pregunta.