這是我的第一篇文章,所以我希望我發佈到正確的地方。jquery插件擴展默認值問題
我想開發一個對話框/模式插件。這是我的第一個插件,我不確定我是否以正確的方式製作了它。我遇到的問題是$ .extend沒有更新設置對象。我有2個使用插件的元素。 #dialog元素不會擴展插件設置對象。我一直在嘗試了幾天的學習插件是如何工作的,並從它裏面:)
$("#icon_menu").Dialog();
$("#dialog").Dialog({closeable:false,clear_on_close : true});
任何幫助殺了我,你能不能給我將不勝感激
這裏是代碼
(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);
哪兒了你發現這種設計模式?看起來真的很複雜。這個對象的實例在哪裏存儲? 'init'方法被調用,但它不返回任何對象的引用,所以一切都立即丟失。也許我讀錯了... – 2010-10-01 19:14:11
我開始使用jquery網站上的模式。我對它做了一些修改。我真的一直在努力與插件模式。在var elem = this中排序的引用;第4行 – ianmac 2010-10-01 19:17:10
'init'中console.log的輸出是什麼? – 2010-10-01 19:24:22