proyectos ejemplos jquery jquery-plugins namespaces javascript-namespaces

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 );

referencia

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 ?