2013-07-15 40 views
2

我正在匿名函數內進行AJAX調用。當成功回調發生時,我可以設置自定義的JS對象id和其他來自數據服務器的重要信息。AJAX成功後不會設置匿名函數

我將a.target.id設置爲返回的data.id後,一切都很正常。

在我正在調用一個函數來使用新更新的自定義JS對象進行一些工作的步驟中,我剛剛使用來自服務器的響應數據進行了更新。我將該對象的父對象傳遞給該對象的所有子對象的方法。

然而,正如你可以在抽點照片上的最後一個例子中看到的a.target.parent.children [0] .ID不是收集和/或它在那裏從未設置的ID。

當使用匿名函數時,我必須在AJAX調用期間丟失對該對象的引用。

這裏是所有的代碼。我如何失去參考?或者,當AJAX調用返回時,如何維護對父級子項的引用?

我從來沒有發生過這種事情,讓我相信它與匿名函數有關。

var horizontalPositioner = function (horizontals) { 

    var hpa = ['?horPositions=']; 

    for (var i = 0; i < horizontals.children.length; i += 1) { 

     hpa.push(horizontals.children[i].id + ':' + horizontals.children[i].position + ','); 
    }; 

    hpa[i] = hpa[i].replace(',', ''); 

    dataBase.update(dbPart('horizontal' + hpa.join(''))); 
}; 


this.subscribe.call(this, e.horizontaladded, function (a, fn) { 
    // 
    if (!a.extra.owner.id) { 
     return; 
    }; 

    (function (a) { 

     dataBase.insert(
      dbPart(
      ['horizontal?a=', a.extra.owner.instanceName, '&id=', a.extra.owner.id].join(''), 
      a.target 
      ), 
      dbCB(
      function (data, status) { 
       if (status === 'error') { return; }; 

       a.target.id = data.id, 
       a.target.HTML().addClass('alum_' + data.id), 
       a.target.finish.id = data.finishID, 
       a.target.size.id = data.sizeID, 
       a.target.siteLine.id = data.sitelineID; 
       // 
       //reposition horizontals 
       // setTimeout(function() { horizontalPositioner(a.target.parent); }, 1000); 
       debugger 
       horizontalPositioner(a.target.parent); 

       if (fn) { processCallbacks(data, status, fn); }; 


       //very last 
       events.publishDatabaseCallbacks(e.horizontaladded, 
        eArgs(a.bay, { data: data, instanceName: 'horizontal', ownerid: a.extra.owner.id, id: data.id })); 

      }, 
      function (xhr, status, errorThrown) { console.log('ERROR adding horizontal'); }) 
     ); 

    }(a)); 

}, true); 

Snap shot of the three steps

+0

不看'a.target'? – user2246674

回答

0

我已經添加了一個匿名函數與嵌套的setTimeout付出一切時間來建立。我有很多事件一次發生,所以現在這個工作。

var horizontalPositioner = function (horizontals) { 

    (function (hors) { 

     setTimeout(function() { 

      var hpa = ['?horPositions=']; 

      for (var i = 0; i < hors.children.length; i += 1) { 
       hpa.push(hors.children[i].id + ':' + (hors.children[i].position ? hors.children[i].position : 1) + ','); 
      }; 

      hpa[i] = hpa[i].replace(',', ''); 

      dataBase.update(dbPart('horizontal' + hpa.join(''))); 

     }, 1000); 

    }(horizontals)); 
};