在Ext.js中进行同步时如何根据响应状态执行操作

时间:2018-10-01 16:04:01

标签: javascript extjs sencha-touch sencha-touch-2 sencha-architect

这是我的商店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)删除肮脏的记录/标记为false。

意味着,假设对于记录1和记录2如果状态码为200,那么我只想对记录1和记录2删除/标记dirty = false。

如果您能帮助我,我将非常感谢您。

1 个答案:

答案 0 :(得分:0)

假设record0,record1,record3 ..具有某些唯一的标识方式。对每个记录进行ajax调用(REST api调用),如果响应为200,则控件将命中“成功”功能。然后,如果响应中包含用于标识记录的数据,则选择该记录并将其脏标志更改为false。在故障功能中执行相同的操作,并将脏标志更改为true。 您需要完成两件事才能得到更好的答案

  
      
  1. 您是否会将记录用作其余api调用的有效负载?
  2.   
  3. 响应将具有指示记录,即我将拥有与   记录吗?
  4.