2015-10-19 53 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