2009-10-21 2 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'로 참조하십시오. –

관련 문제