私がやろうとしていること:
ユーザーがすべてのデータをアップロードすることを決定するまで、データをローカルに保存できるようにします。これを実現するために、フォームからモデルにデータを入力してから、このモデルをストア (同期) に入力しています。このストアには、ローカル ストレージ プロキシがあります。
offlineStore.js :
Ext.define('blahblah.store.offlineStore',{
extend:'Ext.data.Store',
config:{
model:'blahblah.model.myModel',
id: 'offlineRegisterStore',
sorters:'xyz',
grouper:function(record){
return record.get('xyz')[0];
},
proxy: {
type: 'localstorage',
id: 'offlineRegisterStoreid'
}
...
ここで、ユーザーが同期ボタンを押すと、このオフライン ストアから、REST 呼び出しを実行するプロキシを持つ別のストア (
OnlineStore ) にデータをコピーします。
Ext.define('blahblah.store.upStore', {
extend: 'Ext.data.Store',
config: {
model: 'blahblah.model.myModel',
id: 'abc',
sorters: 'xyz',
grouper: function (record) {
return record.get('xyz')[0];
},
proxy: {
type: 'rest',
url: HOST,
headers: HEADERS,
reader: {
type: 'json'
},
writer: {
type: 'json'
}
...
問題:
残念ながら、オフライン ストアからオンライン ストアにデータを追加しても、オンライン ストアは実行されません。その結果、REST 呼び出しは行われません。これは、ストアに変更されていないデータが同期されている場合に発生することを認識しています。オフライン ストアからオンライン ストアにデータをコピーする前にオンライン ストアに何も追加していなかったので、これは奇妙でした。 store.sync()
ということconsole.log
で、作成後すぐにオンラインストアにアップしました。このストアには既にフォーム データが入力されていることがわかりました。そして、今回はオフラインストアsync()
から同じデータを追加しているので、これが実行されない理由だと思います。このオンライン ストアがどのようにしてどこからデータを入手したのか、私は困惑しています。オフライン ストアからオンライン ストアに何かを追加する前に
も試しましたが、ストアのコンテンツには影響しませんでした。 store.removeAll()
もっとコードを見る必要があるかどうか教えてください。
編集 1 : オフライン ストアを埋める方法 - モデルのインスタンスを作成し、フォーム データを入力して実行しofflineStore.add(myModel)
ます。この後、私はそうしますofflineStore.sync()
。これは、モデルにデータを入力する方法です。
var myModel = Ext.create('blahblah.model.myDataModel',{
datafield1 = formdata1,
datafield2 = formdata2
});
どの時点でオンライン ストアを確認するか:
ユーザーがフォームの [送信] ボタンをクリックすると、オフライン ストアを取得してオンライン ストアを作成します。驚いたことに、オンライン ストアだけでなく、オフライン ストアでさえ、フォーム データを編集した時点で正しいことがgetStore
わかりました。sync()
つまり、基本的に、データは、実行する前、またはデータで満たされたモデルを追加する前であっても、オフライン ストアとオンライン ストアに入力されますか? これは私をさらに混乱させます。