J'ai la fonction suivante.
function ChangeDasPanel(controllerPath, postParams) {
$.post(controllerPath, postParams, function(returnValue) {
$('#DasSpace').hide("slide", { direction: "right" }, 1000, function() {
$('#DasSpace').contents().remove();
$('#DasSpace').append(returnValue).css("display", "block");
$('#DasSpace').show("slide", { direction: "right" }, 1000);
});
});
};
Mais je veux pouvoir l'appeler comme ça
ChangeDasPanel("../Home/Test", {} ,function (){
//do some stuff on callback
}
Comment puis-je implémenter la prise en charge des rappels dans ma fonction?
function ChangeDasPanel(controllerPath, postParams, f) {
$.get(
controllerPath,
postParams,
function(returnValue) {
var $DasSpace = $('#DasSpace');
$DasSpace.hide(
"slide", { direction: "right" }, 1000,
function() {
$DasSpace.contents().remove();
$DasSpace.append(returnValue).css("display", "block");
$DasSpace.show("slide", { direction: "right" }, 1000);
}
);
if (typeof f == "function") f(); else alert('meh');
}
);
};
Vous pouvez transmettre des fonctions comme tout autre objet en JavaScript. Passer une fonction de rappel est simple, vous le faites même vous-même dans l'appel $.post()
.
Vous pouvez décider si vous souhaitez que votre rappel soit appelé dans le cadre du rappel $.post()
ou séparément.
Vous savez que les variables et fonctions globales sont mauvaises, alors pourquoi ne pas mettre les vôtres dans l'espace de noms jQuery:
$.extend({
myFunc : function(someArg, callbackFnk){
var url = "http://example.com?q=" + someArg;
$.getJSON(url, function(data){
// now we are calling our own callback function
if(typeof callbackFnk == 'function'){
callbackFnk.call(this, data);
}
});
}
});
$.myFunc(args, function(){
// now my function is not hardcoded
// in the plugin itself
});
Lisez cet article pour mieux comprendre: Création de fonctions de rappel dans jQuery
Si je vous comprends bien, c'est aussi simple que de définir un autre paramètre et d'appeler la variable en tant que fonction:
function foo(mycallback) {
mycallback();
}
Pourquoi n'utilisez-vous pas un objet que vous pouvez transmettre à la fonction. Il ressemble beaucoup plus à jQuery et vous évite d'avoir x paramètres nommés, ce qui est difficile à maintenir car il peut devenir difficile à manier lorsque vous passez les 3 derniers paramètres.
par exemple
function callingFunction(){
var fnSettings: {
url: someUrl,
data: params,
callback : function(){}
};
yourFunction( fnSettings );
}
function yourFunction( settings ) {
$.post( settings.url, settings.data, settings.callback );
}