Нужна помощь в синхронизации счетчика внешнего цикла с dialog.onconfirm () - PullRequest
0 голосов
/ 22 октября 2009

Я пишу игру для Facebook. В следующем коде у меня проблема. У меня есть выполнение цикла for, и в этом цикле я вызываю диалог и реализую для него 'onconfirm'. Проблема в том, что мне нужно получить доступ к счетчику циклов внутри функции onconfirm. Но поскольку onconfirm вызывается вне области действия цикла for, значение счетчика больше недействительно, поскольку оно было увеличено. Мне нужен какой-то способ передать значение счетчика в диалог onconfirm, как это было во время отображения диалогового окна, а не после завершения цикла. Или, может быть, у кого-то есть лучшее решение. Любая помощь будет оценена. Спасибо.

function unloadCargo() {
//debugger;
  var actionPrompt = document.getElementById('action-prompt');
  actionPrompt.setTextValue('Unloading cargo...');

  var ajax = new Ajax();
  ajax.responseType = Ajax.JSON;
  ajax.ondone = function(data) {
debugger;
    if(data.unloadableCargo.length == 0) {
      loadCargo();
    } else {
//console.log('unloadable cargo='+dump(data.unloadableCargo));
      var i = 0;
      var j = 0;
      var ucCount = data.unloadableCargo.length;
      for(i = 0; i < ucCount; i++) {
        cargoDialog = new Dialog();
        cargoDialog.showChoice('Unload Cargo', 'Unload  ' + data.unloadableCargo[i].goods_name + ' at ' + data.unloadableCargo[i].city_name + ' for ' + data.unloadableCargo[i].payoff + 'M euros?');
        cargoDialog.onconfirm = function() {
//console.log('unloadable cargo onconfirm='+dump(data.unloadableCargo));
          var ajax = new Ajax();
          var param = {"city_id": data.unloadableCargo[i].city_id, "goods_id": data.unloadableCargo[i].goods_id, "payoff": data.unloadableCargo[i].payoff};
          ajax.ondone = function(demandData) {
            var demands = document.getElementById('demands');
            var innerXhtml = '<span>';
            for(var j = 0; j < demandData.demands.length; j++) {
              innerXhtml = innerXhtml + '      <div class="demand-item"><div class="demand-city">' + demandData.demands[j].city + '</div><div class="demand-pay">' + demandData.demands[j].cost + '</div><div class="demand-goods">' + demandData.demands[j].goods + '</div></div>';
            }
            innerXtml = innerXhtml + '    </span>';
            demands.setInnerXHTML(innerXhtml);
            // update balance
            loadCargo();
          }
          ajax.post(baseURL + "/turn/do-unload-cargo", param);
        }
        cargoDialog.oncancel = function() { loadCargo(); }
      }
      //loadCargo();
    }
  }
  ajax.post(baseURL + '/turn/unload-cargo');
}

1 Ответ

0 голосов
/ 22 октября 2009

Вам нужно как-то передать значение в диалог.

Я никогда не смотрел на FBJS, но, похоже, для этого можно использовать setContext.

Попробуйте это:

cargoDialog = new Dialog().setContext({currentIndex: i});
// showChoice is the same
cargoDialog.onconfirm = function() {
    alert(this.currentIndex); // Here you should be able to get it
}
...