2015-10-19 52 views
0

我有一個應用程序,顯示一個發佈按鈕的數據表。您可以選擇行,然後單擊發布它們。選定的數據以必要的json格式打包並通過ajax發送,以快速檢查數據是否有任何依賴關係。如果存在依賴關係,則會返回錯誤消息和這些依賴關係的列表。然後,您必須選擇依賴項加上父項並嘗試再次發佈。問題是在將數據操作到正確的json格式併發送給第一個調用之後,數據似乎在模型中完全無法使用和丟失......我可以撥打一次電話,但不能再次撥打電話。任何幫助深表感謝!這是我的控制器:恢復安博數據

export default Ember.ArrayController.extend({ 
actions: { 

    publishSubmit: function(){ 

     var checkedItems = this.get('model').filterBy('isChecked', true); 

     if(checkedItems.length > 0){ 

      this.send('dependencyCheck', checkedItems); 
     } 
     else{ 
      this.announce.error('No items selected for publish.'); 
     } 
    }, 

    dependencyCheck: function(items){ 
     var _this = this, data = []; 

     items.forEach(function(item){ 
      delete item._data.isChecked; 
      delete item._data.sortByDate; 
      item._data.publisherId = item._data.id; 
      delete item._data.id; 
      item._data.updatedDate = null; 
      data.push(item._data); 
     }); 

     //data formating(required) 
     data = _this.capitalizeAll(data); 
     data = JSON.stringify(data); 

     console.log(data); 

     Ember.$.ajax({ 
      type: 'POST', 
      dataType: 'json', 
      contentType: 'application/json', 
      beforeSend : function(xhr) { 
       xhr.setRequestHeader("Token", sessionStorage.getItem('authToken')); 
      }, 
      url: config.host + '/AssessmentPublishService/DependentPublishableItems', 
      data: data 
     }).then(function(dependencies){ 

      var processDependencies = _this.processResponseData(dependencies); 

      if(dependencies.Status === "Success"){ 

       console.log("ProccessD"); 
       console.log(processDependencies); 

       return JSON.stringify(processDependencies); 
      } 
      else{ 
       return this.announce.error('Failed to process.'); 
      } 
     }); 
    } 
} 
} 

回答

1

您在第一次調用dependencyCheck時突變了模型。通過使用delete,您將模型置於不良狀態。你不應該使用_data(它是私有的,由下劃線作爲暗示)

items.forEach(function(item){ 
     delete item._data.isChecked; 
     delete item._data.sortByDate; 
     item._data.publisherId = item._data.id; 
     delete item._data.id; 
     item._data.updatedDate = null; 
     data.push(item._data); 
    }); 

你可以把任何值,需要在不改變模型:

items.forEach(function(item){ 
     data.push({ 
      publisherId: item.get('id'), 
      updatedDate: null 
      // etc 
     }); 
    }); 

更重要的是,呼籲模型serializeconfigure the serializer包括你想要的屬性。

var data = items.map(model => model.serialize()); 
    data = this.capitalizeAll(data); 
    data = JSON.stringify(data); 
+0

你絕對釘了它。我通過操縱私人數據誤解了我正在做的事情。一旦修改,我就永久地修改了數據。所以我按照你的建議做了,並將其零碎地推入一個新的結構。我不太瞭解地圖/序列化方法。它可能高於我的薪酬等級。非常感謝你的幫助! – campatsky