次の機能があります。
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);
});
});
};
しかし、私はこのようにそれを呼び出すことができるようにしたい
ChangeDasPanel("../Home/Test", {} ,function (){
//do some stuff on callback
}
関数にコールバックのサポートを実装するにはどうすればよいですか?
_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');
}
);
};
_
JavaScriptの他のオブジェクトと同様に関数を渡すことができます。コールバック関数を渡すのは簡単で、$.post()
呼び出しで自分で行うこともできます。
コールバックを$.post()
コールバックの一部として呼び出すか、それ自体で呼び出すかを決定できます。
グローバル変数とグローバル関数が悪であることがわかっているので、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
});
この記事を読んで理解を深めてください。 jQueryでのコールバック関数の作成
私があなたを正しく理解していれば、別のパラメータを設定して変数を関数として呼び出すのと同じくらい簡単です:
function foo(mycallback) {
mycallback();
}
関数にパススルーできるオブジェクトを使用してみませんか。これはjQueryのようなもので、3つのパラメータを超えると扱いにくいため、メンテナンスが困難な名前付きパラメータxを節約できます。
例えば
function callingFunction(){
var fnSettings: {
url: someUrl,
data: params,
callback : function(){}
};
yourFunction( fnSettings );
}
function yourFunction( settings ) {
$.post( settings.url, settings.data, settings.callback );
}