Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要一些帮助同步';正在使用dialog.onconfirm()调用外部循环计数器_Javascript_Ajax_Dialog_Fbjs - Fatal编程技术网

Javascript 需要一些帮助同步';正在使用dialog.onconfirm()调用外部循环计数器

Javascript 需要一些帮助同步';正在使用dialog.onconfirm()调用外部循环计数器,javascript,ajax,dialog,fbjs,Javascript,Ajax,Dialog,Fbjs,我正在为Facebook写一个游戏。在下面的代码中,我遇到了一个问题。我有一个for循环正在执行,在该循环中,我调用一个对话框并为该对话框实现“onconfirm”。问题是我需要访问onconfirm函数内部的循环计数器。但是,由于在for循环的作用域之外调用了onconfirm,因此计数器值不再有效,因为它已递增。我需要某种方法将计数器值传递给onconfirm对话框,就像对话框显示时一样,而不是在循环完成后。或者有人有更好的解决办法。任何帮助都将不胜感激。谢谢 function unload

我正在为Facebook写一个游戏。在下面的代码中,我遇到了一个问题。我有一个for循环正在执行,在该循环中,我调用一个对话框并为该对话框实现“onconfirm”。问题是我需要访问onconfirm函数内部的循环计数器。但是,由于在for循环的作用域之外调用了onconfirm,因此计数器值不再有效,因为它已递增。我需要某种方法将计数器值传递给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');
}
函数unloadCargo(){
//调试器;
var actionPrompt=document.getElementById('action-prompt');
actionPrompt.setTextValue('卸货…');
var ajax=newajax();
ajax.responseType=ajax.JSON;
ajax.ondone=函数(数据){
调试器;
if(data.unloadablechargo.length==0){
装货();
}否则{
//console.log('unloadable cargo='+转储(data.unloadable cargo));
var i=0;
var j=0;
var ucCount=data.unloadablechargo.length;
对于(i=0;i
您需要以某种方式将值传递给对话框

我从未看过FBJ,但似乎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
}

setContext确定哪个对话框元素具有焦点。我将计数器添加为对话框的属性,然后在dialog.onconfirm中将其引用为'this.property',从而使其正常工作。