使用REST代理的简单模型/存储问题。

时间:2013-04-01 15:58:57

标签: rest sencha-touch-2

我有一个非常简单的模型/商店/代理用于REST接口。我遇到的问题是,当我加载商店(通过GET)时,商店似乎将新记录放在内部toCreate列表中 - 所以当我调用sync()时,它会尝试POST它刚刚被删除的记录。我知道我正在做一些愚蠢的事情,但我已经尽可能地简化了这一点而没有运气......

模型

Ext.define('sld.model.Org', {
extend: 'Ext.data.Model',



   config: {
        clientIdProperty: '_id',
        fields: [
            { name: '_id',                  type: 'string' },
            { name: 'name',                 type: 'string' },
            { name: 'type',                 type: 'string' },
            { name: 'version',              type: 'string' }
        ]
    }
});

商店/代理:

Ext.define('sld.store.Orgs', {
    extend  : 'Ext.data.Store',

    config: {
        model: 'sld.model.Org',
        storeId: 'orgs',

        proxy: {
            type: 'rest',
            url: 'http://127.0.0.1:3003/orgs',
            useDefaultXhrHeader:false,
            enablePagingParams: false,
            limitParam: false,

            reader: {
                type: 'json',
                rootProperty: 'orgs'
            }
        }
    }
});

顺便说一句,我也是在使用Basic Auth这样做 - 我不认为这会对事情产生影响,但为了以防万一,我会包括:

  setAuthString: function (username, password) {
         authString = 'Basic ' + base64_encode (username + ':' + password);
    },

    setAuthHeader: function(proxy) {
        var header = proxy.getHeaders();
        header.Authorization = authString;
        proxy.setHeaders(header);
    }

所以,当做一个加载,并在完成时立即调用sync(),我回来说有8个对象被添加,第一个POST出现在我的服务器端(由于我还没有实现,所以失败了)。

orgsStore.load (function(records, operation, success) {
        if (success) {
            console.log('loaded orgs count = ' + records.length);
            console.log ('does it need a sync?');
            var obj = orgsStore.sync();
            console.log ('sync returned added ' + obj.added.length + ' and updated ' + obj.updated.length);
        } else {
            console.log ('failed to load orgs!');
        }
    }, this);

任何关于在哪里追逐这个的想法都会很棒。

1 个答案:

答案 0 :(得分:1)

对于后代,如果有其他人遇到此问题 - 问题结果是我使用'clientIdProperty'来识别记录的唯一ID而不是使用'idProperty'。后者是我想要识别财产的唯一ID。文档参考是here

Sencha Touch论坛上的answer结束了: