Merci à tous d'avance. C'est la première fois que je développe un plugin jQuery (et je développe aussi en javascript), et je dois dire que je suis assez geek (Il a probablement beaucoup de choses hideuses pour vous, les développeurs js/jquery expérimentés, mais c'est mon première tentative - s'il vous plaît ours avec moi :). Je me félicite de toute critique constructive de tout code.jQuery Plugin Development - transmettre les paramètres à la fonction de rappel définie par l'utilisateur
Ceci est un plugin de boîte modèle (oui, il y en a d'autres, mais les exigences de travail dictent que je code moi-même pour éviter les dépendances tierces) qui affiche le texte donné, le texte d'un appel ajax ou un formulaire donné/pris à partir d'un appel ajax, puis gère la soumission du formulaire via ajax. Cela doit être aussi personnalisable que possible, donc j'essaye de fournir quelques hooks (?? - fonctions anonymes) que l'utilisateur peut utiliser pour passer du code personnalisé au plugin.
Le problème que je rencontre est de fournir des paramètres à la fonction utilisateur. Si j'utilise le mot clé 'this', je peux passer la variable 'msg' très bien et la fonction utilisateur peut l'utiliser. Mais quand je passe 'msg' au lieu de 'this' l'utilisateur obtient une variable vide. Je voudrais passer plus que juste le msg - également un tableau de données passées dans l'appel d'ajax et un objet de jQuery de la boîte de modèle est ce que je voudrais vraiment faire. Ci-dessous est l'extrait - la fonction est à l'intérieur de et appelée dans le plugin; J'ai juste groupé du code dans des fonctions pour l'organisation/développement.
// Submits the form inside of the model box
// and calls the user hooks of onFormSuccess and
// onFormFailure for ajax success and error
function submitForm() {
var URL = $('form',$contentNode).attr('action'),
method = $('form',$contentNode).attr('method'),
data = $('form',$contentNode).formSerialize();
$.ajax({
url: URL,
type: method,
data: data,
success: function(msg) {
// Doesn't work, but I would like it too
//settings.onFormSuccess.call(msg, breakData(data));
// Does work
settings.onFormSuccess.call(this);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
setings.onFormFailure.call(errorThrown);
}
});
closeModel();
}
tl dr; pourriez-vous fournir un exemple plus court? – Greg
vient de le faire, désolé à ce sujet –