2009-10-21 52 views
0

我正在寫一個Facebook的遊戲。在下面的代碼中,我有一個問題。我有一個for循環執行,並在該循環中,我調用對話框並實現對話框的'onconfirm'。問題是我需要訪問onconfirm函數中的循環計數器。但是因爲onconfirm被調用超出for循環的範圍,所以計數器值不再有效,因爲它已經增加了。我需要一些方法將計數器的值傳遞給對話框確認,就像在對話框顯示時那樣,而不是在循環結束後。或者也許有人有更好的解決方案。任何幫助,將不勝感激。謝謝。需要一些幫助同步外環計數器與dialog.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'); 
} 

回答

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 
} 
+0

setContext確定哪個對話框元素具有焦點。 我通過添加計數器作爲對話框的屬性來工作,然後在dialog.onconfirm中將其稱爲'this.property'。 – 2009-10-22 07:09:30