0

I am writing a game for Facebook. IN the following code, I have a problem. I have a for loop executing, and in that loop, I call a dialog and implement 'onconfirm' for the dialog. The problem is that I need to access th e loop counter inside of the onconfirm function. But because the onconfirm is called outside of the scope of the for loop, the counter value is no longer valid because it's been incremented. I need some way to pass the counter value to the dialog onconfirm as it was at the time the dialog was displayed, not after the loop has finished. Or maybe someone has a better solution. Any help would be appreciated. Thanks.

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');
}
4

1 回答 1

0

您需要以某种方式将值传递给对话框。

我从未看过 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
}
于 2009-10-22T00:34:16.170 回答