恢复Ember数据

时间:2015-10-19 21:12:13

标签: ember.js ember-data ember-cli

我有一个应用程序,它显示带有发布按钮的数据表。您可以选择行,然后单击以发布它们。所选数据以必要的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 个答案:

答案 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);