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'
}
}
}
});
余談ですが、私は基本認証でもこれを行っています。これが影響を与えるとは思いませんが、念のため、それを含めます。
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);
これをどこで追跡するかについてのアイデアは素晴らしいでしょう。