writeMessageという関数があります。writeMessageは、ローカライズされたコンテンツを取得するためにajaxリクエストを呼び出します。また、コンテンツがajaxリクエストから返されると、「n」秒後にメッセージがフェードアウトします。したがって、すべてが機能し、いくつかの呼び出しでテストしましたが、JavaScriptのクロージャーステートメントを処理するときに変数のスコープを完全に理解していないため、非常に複雑だと感じています。私がここであまりにも多くのフープを飛び越えて以下を達成することができないかどうか誰かにアドバイスできますか?
関数getTextResourceはパラメーター(文字列、文字列、オブジェクト、関数)を取ります
- 'function'パラメーターは、ajaxリクエストが完了すると呼び出されるコールバックです。
- 'object'パラメータは、メッセージの書き込み方法と書き込み場所に関するすべての詳細を含む引数オブジェクトです。
- 'string'および'string'パラメーターがajaxリクエストに渡されています。
getTextResource内で、元のデフォルトテキストとコールバック関数とともに'object'パラメーターをコンテキストとして渡すajaxメソッドを呼び出しています。ajaxリクエストが完了すると、コンテキストを介して、次の結果を渡すコールバック関数を呼び出します。引数とともにサービス呼び出し。
コンテキストを渡し続ける必要がありますか、それとも関数が再度呼び出された場合にgetTextResoruceに渡されるすべてのものに別の値が割り当てられないようにする必要がありますか?
function writeMessage(args) {
var d = $('<div></div>');
getTextResource(args.resourceId, args.message, { args: args, messageElement: d },
function (text, context) {
var args = context.args;
var d = context.messageElement;
d.empty();
d.append(text);
args.element.append(d);
if (args.fadeTimeOut > 0)
setTimeout(function () {
d.fadeOut('slow', function () {
$(this).remove();
});
}, args.fadeTimeOut);
}
);
}
var getTextResource = function (resourceId, defaultText, context, cb) {
resourceId = resourceId + '';
defaultText = defaultText + '';
if (resourceId == '') resourceId = defaultText;
if (defaultText == '') defaultText = resourceId;
try{
var request = $.ajax({
type: 'GET',
url: 'http://localhost/EaiCCM/api/' + BusinessScope.Version + '/' + BusinessScope.CampaignSegment + '/TextResource',//?' + qs,
data: {ResourceId: resourceId, DefaultText: defaultText},
cache: false,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
context: { defaultText: defaultText, context: context, cb: cb }
});
request.done(function (result) {
var txt = this.defaultText;
try {
if ($.isPlainObject(result))
txt = result.Detail;
}
catch (e) {
}
finally {
if (typeof this.cb == 'function')
this.cb(txt, this.context);
}
});
request.fail(function (jqXHR, textStatus, context) {
if (typeof this.cb == 'function')
this.cb(this.defaultText, this.context);
});
}
catch (e) {
if (typeof cb == 'function')
cb(defaultText, context);
}
};