Appeler une méthode de plugin depuis l'extérieur
Bonjour,
Je suis en train de développer un plugin me permettant de gérer des tableaux et je souhaiterai pouvoir appeler, depuis l'extérieur du plugin, un méthode permettant de recharger les données.
En gros, dans le code principal, j'aimerai faire ça :
Code:
1 2 3 4 5 6 7 8
|
var myTab = $('#monDiv').tabData({
'param1' : 'bidule',
});
$('.btn').click(function(){
myTab.reloadTableau();
}) |
la classe .btn est indépendant du plugin mais fait appel à la méthode reloadData que je dois définir à l'intérieur du plugin tabData afin de manipuler les données du tableau (en l'occurrence de le recharger).
Voici mon plugin simplifié (avec la tentative de déclaration de la méthode accessible par l'extérieur) :
Code:
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
|
(function ( $ ) {
// corps du tableau
function constructionTBody(options){
var tabBody = $(options.cible).find('tbody');
$.ajax({
// url récupération des données
})
.done(function(retour) {
$.each(retour, function(k, item){
// construction des lignes avec les résultats de la requête ajax
$(tabBody).append('<tr><td>'+retour.item.val1+'</td><td>'+retour.item.val2+'</td><td>'+retour.item.val3+'</td></tr>');
})
})
}
$.fn.tabData = function(parametres){
return this.each(function(){
// paramètres par défaut
var defaults = {
// options
};
// fusion des paramètres par défaut avec ceux du code appelant
var opts = $.extend( {}, defaults, parametres );
// en tête du tableau
$(opts.cible).append('<thead></thead><tbody></tbody>');
var tabHead = $(opts.cible).find('thead');
var ligne = '<tr><th>#</th>';
$.each(opts.colonnes, function(k, c){
ligne += '<th class="headcol" data-el-col="'+k+'">'+c.libelle+'</th>';
})
ligne += '<th></th></tr>';
tabHead.append(ligne);
// affichage du body du tableau
constructionTBody(opts);
// j'ai, entre autres, tenté un truc dans ce goût là...
// reloadTableau = function(){
// constructionTBody(opts);
// }
})
};
}( jQuery )); |
j'ai cherché un peu partout, mais je n'ai rien trouvé de concluant et tous les essais que j'ai fait ont échoué.
Auriez-vous une piste ?
Merci !