首页 > 解决方案 > 如何在 Ext.js 中进行同步时根据响应状态执行操作

问题描述

这是我的商店 MyStore.js

Ext.define('myProject.store.MyStore', {
    config:{
        storeId:    'MyStore',
        autoLoad:   false,
        autoSync:   false,
        allowSingle: true,
        clearOnPageLoad:    true,

        model:              'abc.model.MyStoreModel',
        proxy: {
            type:   'rest',
            actionMethods: {create: 'POST', read: 'GET', update: 'POST', destroy: 'POST'},
              url:'/services/rest/MyService/myService',
            reader: {
                type: 'json',
                rootProperty:MyServiceView.elements.collection',
                successProperty : 'success'
            },
            writer:
            {
                type: 'json',
                root: 'MyServiceDataView',
                nameProperty: 'mapping',
                expandData : true
            },
            listeners: {
                exception:          function(proxy,response,operation){

                }
            }   
        }
    }
});

这是我的模特

Ext.define( 'myProject.model.MyStoreModel', {
    extend:         'Ext.data.Model',
    config:{
        idProperty:     'keyStr',
        fields:[
                {
                    name:           'keyStr',
                    type:           'string',
                },
                {
                    name:           'sId',
                    type:           'int'
                },
                {
                    name:           'dCode',
                    type:           'string'
                },
                {
                    name:           'sNumber',
                    type:           'int'
                }

            ]
    },

});

在我的 Controller.js 中,我有这个方法

syncMyStore: function()
    {

        var deferred = Q.defer();
        var successfulSync= 'false';
        var me = this;
        var myStore = Ext.getStore('MyStore');

        if(this.isSyncRequires(myStore)) //assume this is always true
        {
            myStore.sync({
                success: function () {
                    successfulSync = 'true';
                    deferred.fulfill();
                }
            });
        }
        else
        {
            deferred.fulfill();
        }
        return successfulSync;
    },
  1. 假设我的商店中有 5 条记录,即 record0、record2 ...record4。
  2. 对于每条记录,它都在调用 Rest Service。所以总共有5个休息电话

要求1:我想根据状态码执行一些操作,而不是使用成功属性。即如果状态码为200,则认为它成功。

要求 2:在每次休息呼叫之后,我想根据该特定记录的响应状态 (200) 删除记录/将脏标记为假。

意思是,如果状态码是 200,假设记录 1 和记录 2,那么我只想删除/标记记录 1 和记录 2 的脏=假。

如果你能帮我解决这个问题,我会非常感谢你。

标签: javascriptextjssencha-touchsencha-touch-2sencha-architect

解决方案


假设record0,record1,record3 ..有一些独特的识别方式。为每条记录进行 ajax 调用(REST api 调用),然后如果响应为 200,控制将点击“成功”功能。然后,如果响应具有识别记录的数据,则选择该记录并将其脏标志更改为 false。在失败函数中执行相同的操作并将脏标志更改为真。您需要遵守两件事才能做出更好的回答

  1. 你会使用记录作为你的 rest api 调用的有效负载吗?
  2. 响应是否有指示记录,即我将有与记录相关的指南?

推荐阅读