Я обычно использую структуру, подобную этой
(function ($, plugin) {
"use strict";
$[plugin] = function (options/* params */) {
var settings;
settings = $.extend({}, $[plugin].defaultSettings, options);
//static funciton code here
};
$.fn[plugin] = function (options/* params */) {
this.each(function (index, element) {
var settings, $this;
settings = $.extend({}, $.fn[plugin].defaultSettings, options);
$this = $(this);
$this.data(plugin+'Settings', settings);
//chainable function code here
});
return this;
};
$[plugin].defaultSettings = {
'foo': 'bar'
};
$.fn[plugin].defaultSettings = {
'fizz': 'buzz'
};
$(function(){
//document.ready initialization code here
});
}(jQuery, 'foo'));
Обычно я не беспокоюсь о параметре plugin
, но это может быть полезно для обобщения названия плагина
Для ярлыков событий я буду использовать:
$.each('foo bar baz'.split(' '), function(i, name) {
$.fn[name] = function(data,fn){
if (fn == null) {
fn = data;
data = null;
}
return arguments.length > 0 ?
this.bind(name, data, fn) :
this.trigger(name);
};
});
, который будет выдавать .foo()
, .bar()
, .baz()
как ярлыки для привязки / запуска событий 'foo'
, 'bar'
и 'baz'
.