Bonjour à tous, je vous présente ici le modèle que j'utilise pour concevoir mes plugins jQuery.
Je me suis inspiré de plusieurs modèles différents mais notamment de http://stefangabos.ro/jquery/jquery-...ate-revisited/ que j'ai tout de même bien modifié, principalement sur la façon d'appeller les méthodes publiques.
Boilerplate
Usage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 (function($) { // Static private vars var pluginName = 'boilerplate', pStatic = { // Static public vars foo: 'bar' }; $[pluginName] = function(element, options) { // Private vars var plugin = this, $element = $(element), element = element, defaults = { foo: 'bar', onFoo: function() {} }, // Private methods privateMethod = function() { // code goes here }; // Public methods plugin.methods = { init: function() { plugin.settings = $.extend({}, defaults, options); // code goes here }, publicMethod: function() { // code goes here } }; // Public vars plugin.settings = {}; plugin.static = pStatic; plugin.methods.init(); } $.fn[pluginName] = function(options) { var args = arguments; return this.each(function() { var i = $(this); if (undefined == (plugin = i.data(pluginName))) { var plugin = new $[pluginName](this, options); i.data(pluginName, plugin); } else if (plugin.methods[options]) { plugin.methods[options].apply( plugin, Array.prototype.slice.call( args, 1 )); } }); } })(jQuery);
Ce modèle a été aussi conçu comme un "pense bête", regroupant quelques idées dans le but de m'en rappeler au besoin mais que je commence en général par supprimer. Je pense par exemple à l'objet pStatic dont je ne me sert jamais ou la private var element.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // init $(element).boilerplate({foo:'bar'}); // call publicMethod $(element).boilerplate('publicMethod', param1, param2);
On peut aussi vouloir passer la méthode init en private, rien de compliquer à ça mais par défaut je l'ai laissé en public.
Si vous avez des remarques, questions ou autre je suis à l'écoute![]()
Partager