c'est mon premier poste, donc j'espère que je poste au bon endroit. J'essaye de développer un dialogue/module modal. C'est mon premier plugin et je ne suis pas sûr si je l'ai produit correctement. Le problème que je rencontre est que $ .extend ne met pas à jour l'objet settings. J'ai 2 éléments utilisant le plugin. l'élément #dialog n'étend pas l'objet de paramètres plugins. J'ai essayé pendant deux ou trois jours pour apprendre comment fonctionnent les plugins et son me tuer de l'intérieur :)jquery extension étendre défaut problème
$("#icon_menu").Dialog();
$("#dialog").Dialog({closeable:false,clear_on_close : true});
Toute aide que vous pouvez me donner serait grandement apprécié
est le code ici
(function($){
$.fn.Dialog = function(method) {
var elem = this;
var settings = {
'mask' : '#mask',
'closeable' : true,
'clear_on_close' : false
};
var methods = {
init : function(options) {
if (options) {
$.extend(settings, options);
}
console.log(settings);
},
open : function(options) {
var window_width = $(window).width();
var window_height = $(window).height();
var modal_height = "";
var modal_width = "";
var top = "";
var left = "";
if(!settings.set_width)
{
modal_width = elem.outerWidth();
}else{
modal_width = settings.set_width;
}
if(!settings.set_height)
{
modal_height = elem.outerHeight();
}else{
modal_height = settings.set_height;
}
if(!settings.set_y_pos)
{
top = (window_height-modal_height)/2;
}else{
top = settings.set_y_pos;
}
if(!settings.set_x_pos)
{
left = (window_width-modal_width)/2;
}else{
left = settings.set_x_pos;
}
elem.addClass('active').css({'top': top + 'px', 'left': left + 'px'});
$(settings.mask).css({ 'display' : 'block', opacity : 0}).fadeTo(500,0.8);
elem.css({ 'display' : 'block', opacity : 0}).fadeTo(500,1);
if(settings.closeable){$(settings.mask).bind('click.Dialog', methods.close);}
$(window).bind('scroll.Dialog', methods.reposition);
},
open_ajax : function(options)
{
$.get(options.page, function(data){
elem.html(data);
methods.open();
});//$.get("sign_in.html",
},
close : function(options) {
$(settings.mask).fadeOut(500);
elem.fadeOut(500);
//alert(settings.clear_on_close)
console.log(settings.clear_on_close)
if(settings.clear_on_close)
{
elem.html("");
}
$(window).unbind('scroll.Dialog');
$(settings.mask).unbind('click.Dialog');
},
reposition : function(options)
{
$(settings.mask).css({"marginTop": ($(window).scrollTop()) + "px"});
elem.stop().animate({"marginTop": ($(window).scrollTop()) + "px"},1000);
}
};
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);
Où avez vous trouvez ce motif de design? Cela semble vraiment compliqué. Où l'instance de cet objet est-elle stockée? La méthode 'init' est appelée, mais elle ne renvoie aucune sorte de référence à l'objet, donc tout est perdu immédiatement. Peut-être que je le lis mal ... –
J'ai commencé à utiliser le motif sur le site Web de jquery. J'ai fait quelques changements. J'ai vraiment lutté avec le modèle de plugin. la référence triée dans le var elem = this; line 4 – ianmac
Quelle est la sortie du fichier console.log dans 'init'? –