ejemplos - espacio de nombres jquery: cómo pasar las opciones predeterminadas de un método a los métodos de subsecuencia?
django (1)
Me parece que estás tratando de reinventar complementos jquery extensibles (también conocidos como jQuery UI Widgets). Puedo guiarte a través de mucho cómo lograr lo que intentas hacer, pero realmente está reinventando la rueda. La jQuery UI Widget Factory es ideal para este tipo de cosas.
jQuery Widget Factory : esta es su documentación anterior, pero describe la fábrica de widgets mejor que cualquier otra cosa, en mi humilde opinión. Han realizado algunos cambios menores en 1.9 / 1.10, pero la mayoría de los conceptos siguen siendo los mismos.
Editar
Aquí están mis modificaciones a tu código. Creo que esto hace lo que estabas buscando.
(function($) {
var methods = {
init: function(options) {
var defaults = {
element: "selection"
}
this.options = $.extend(defaults, options);
alert("init: " + this.options.element);
},
show: function() {
alert("show: " + this.options.element);
},
hide: function() {
alert("hide: " + this.options.element);
}
};
$.fn.plugin = function( method ) {
if ( methods[method] ) {
methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === ''object'' || ! method ) {
methods.init.apply( this, arguments );
} else {
$.error( ''Method '' + method + '' does not exist on jQuery.tooltip'' );
}
return this; // this is needed to ensure chainability
};
})( jQuery );
var blah = $(''#hello'').plugin(''init'').plugin(''show'');
¿Cómo puedo pasar las opciones predeterminadas de un método a los métodos de subsecuencia ?
Por ejemplo, tengo algunas configuraciones predeterminadas en el método init
. y quiero usar estas configuraciones para otros métodos como show
,
(function($) {
var methods = {
init: function(options) {
var defaults = {
element: "selection"
}
var options = $.extend(defaults, options);
var o = options;
alert(o.element);
},
show: function(o) {
alert(o.element);
},
hide: function() {
alert(o.element);
}
};
$.fn.plugin = function( method ) {
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === ''object'' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( ''Method '' + method + '' does not exist on jQuery.tooltip'' );
}
};
})( jQuery );
var blah = $(''#hello'').plugin(''show''); // TypeError: o is undefined
Me gustaría obtener la selection
como la respuesta ... ¿es posible?
EDITAR:
(function($) {
$.fn.plugin = function( method ) {
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === ''object'' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( ''Method '' + method + '' does not exist on jQuery.tooltip'' );
}
};
$.fn.plugin.defaults = {
attr: ''checked'',
expected: true,
onChange: function(){}
};
var methods = {
init: function(options) {
var options = $.extend({}, $.fn.plugin.defaults, options);
var o = options;
var $this = this;
$this.show();
//alert(o.attr);
},
show: function(options) {
var options = $.extend({}, $.fn.plugin.defaults, options);
var o = options;
alert(o.expected);
},
hide: function(object) {
alert(o.element);
}
};
})( jQuery );
var blah = $(''#hello'').plugin(''show'',{expected:"#hello world"});
ahora obtengo #hello world
(correcto)
pero,
var blah = $(''#hello'').plugin(''init''); // returns nothing
Me gustaría volverme true
como respuesta porque init
está accediendo a show
. Entonces, ¿cómo accedo a otros métodos desde un método ?