「モジュール」の配列を実行するためのJavaScriptをいくつか書きました。モジュールごとに ajax 呼び出しを行い、モジュールの html を取得し、モジュールをページ レイアウトの 2 つの列のいずれかにダンプします。
var modules = [
{ name: 'ExchangeStatus', title: 'Exchange Status', column: 'left' },
{ name: 'Grid', title: 'Contacts', column: 'right' }
{ name: 'Filters', title: 'Filters', column: 'left' }
],
modulesUrl = '/Modules/';
for (var count = 0; count < modules.length; count++) {
var module = modules[count];
// Get module HTML.
$.ajax({
url: modulesUrl + module.name,
success: function (moduleHtml) {
// Append module HTML to appropriate element.
$('#' + module.column + 'Column').append(moduleHtml);
// Custom event to trigger the module to load its data.
var initializeModuleEvent = $.Event('initialize' + module.name);
initializeModuleEvent.firstLoad = true;
$(document).trigger(initializeModuleEvent);
}
});
}
これに関する問題は、for ループが競合状態を作成することです。forループはajaxコールバックが戻るずっと前に終了するため、ajaxコールバックmodule.column
では、ほとんどの場合、最後のモジュールの値です。各コールバックが適切なモジュールを処理するようにモジュール変数を維持するにはどうすればよいですか? 現在、ループ内の最後のモジュールが左の列にあるため、3 つのモジュールはすべて左の列になります。