我搜索了很多,但我仍然不確定,這是做我想做的最好的方式。 我正在寫一個jQuery插件,它已經工作,但現在我想改善我的代碼,因爲我在編寫這個時知道了更多的功能。如何在jquery插件中處理變量的正確(完美)方式?
以此作爲基礎我從http://docs.jquery.com/Plugins/Authoring官方的jQuery頁面的代碼(插件選項)
我不會在這裏用我自己的代碼,因爲從jQuery的代碼已經足夠了,我的問題
(function($){
var methods = {
init : function(options) {
var defaults = {
value1: '',
value2: ''
};
var options = $.extend(defaults, options);
return this.each(function(){
value3 = $(this).parent();
});
},
log : function() {
console.log(value3);
console.log(defaults.value1);
}
};
$.fn.my_plugin = function(method) {
// Method calling logic
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);
這就是我的插件的結構。這只是非常如今剝離;) 現在我想要做的事端是這樣的:
$('#element1').my_plugin({value1 : 1, value2 : 2});
$('#element2').my_plugin({value1 : 3, value2 : 4});
現在我想登錄到控制檯中的值(不正是我想要真正做的,但我的問題是夠再次)
而且我想使用的功能,如本
$('#element1').my_plugin('log');
$('#element2').my_plugin('log');
這是我的第一個問題。如何在init函數中獲取變量時,何時在日誌函數中?什麼是最好的方式來做到這一點?
我試圖建立全球性這樣的價值觀:
(function($){
var defaults = {
value1: '',
value2: ''
};
var methods = {
init : function(options) {
return this.each(function(){
value3 = $(this).parent();
});
},
log : function() {
console.log(value3);
console.log(defaults.value1);
}
};
但如果我這樣做,並使用$('#element1').my_plugin('log');
,我只能從第二初始化默認$('#element2').my_plugin({value1 : 3, value2 : 4});
因此,這裏是我的第二個問題:我如何爲每個init使用特定的變量?
我希望它很清楚,我想知道的。我仍然在學習jQuery並給予我最大的幫助,並且搜索了很多如何解決這個結構的問題。我想用這樣的結構,因爲它是從jQuery的官方之一,我喜歡做的事情吧:P
想太多這裏很快就會看到一些答案:)
感謝您的幫助,
朱利安
如果某人interessted成基本插件結構 - 這是我用我的插件現在:)
(function($){
var methods = {
init : function(options) {
console.log('init');
var defaults = {
value1: '',
value2: ''
};
var options = $.extend(defaults, options);
return this.each(function(){
var $this = $(this);
var data = $this.data('test');
var parent = $this.parent();
var element = $this;
if (!data) {
var data = {};
$.each(options, function(key, value) {
data[key] = value;
});
data["parent"] = parent;
data["element"] = element;
$this.data('test', data);
}
$this.test('log');
});
},
log : function() {
console.log('log');
return this.each(function(){
var $this = $(this);
var data = $this.data('test');
console.log(data);
});
}
};
$.fn.test = 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.test');
}
};
})(jQuery);
你的意思是這樣的: '$( '#元素1')的數據( '值',{值1: '1',值3: '3'});' 我想到這一點,但我認爲會有更優雅的方式來做到這一點。在其他插件中沒有經常看到這一點 - 另一方面,大多數插件不需要像$('element')。my_plugin('log')這樣的函數,並且只使用David的那個結構 – KddC 2012-07-10 16:03:24
似乎是最好的辦法。謝謝 – KddC 2012-07-11 07:07:39