我有一个应用程序,它显示带有发布按钮的数据表。您可以选择行,然后单击以发布它们。所选数据以必要的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.');
}
});
}
}
}
答案 0 :(得分: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
});
});
更好的是,请在模型上调用serialize,然后configure the serializer包含您想要的属性。
var data = items.map(model => model.serialize());
data = this.capitalizeAll(data);
data = JSON.stringify(data);