これはTommyMaintz によってSencha Touch 2 Forumsで回答されましたが、ここでも回答したいと思います。
「間違っていると思うことの 1 つは、record.data を使用して LocalStore にレコードを追加していることです。ST2 では、モデル キャッシュができました。これは、まったく同じモデルと ID を持つ 2 つのインスタンスを作成した場合、 , そのインスタンスを 2 回目に作成すると、既存のインスタンスが返されるだけです. これは、ローカル ストアを同期する場合、そのレコードには既に ID があるため、そのレコードを「ファントム」レコードとして認識しないことを意味します.すべてのデータを使用して ID を削除してレコードの「コピー」を作成する場合は、この操作を行う必要があります。これにより、新しいシンプルな ID が生成され、それをローカル ストレージに保存すると、適切なローカル ID。
これを実行しようとしたとき、モデルの「コピー」メソッドがこれを処理するように更新されていないことに気付きました。次のオーバーライドを適用すると、 localStore.add(record.copy()); を実行できるはずです。localStore.sync()"
Ext.define('Ext.data.ModelCopyFix', {
override: 'Ext.data.Model',
/**
* Creates a copy (clone) of this Model instance.
*
* @param {String} id A new id. If you don't specify this a new id will be generated for you.
* To generate a phantom instance with a new id use:
*
* var rec = record.copy(); // clone the record with a new id
*
* @return {Ext.data.Model}
*/
copy: function(newId) {
var me = this,
idProperty = me.getIdProperty(),
raw = Ext.apply({}, me.raw),
data = Ext.apply({}, me.data);
delete raw[idProperty];
delete data[idProperty];
return new me.self(null, newId, raw, data);
}
});