1

モデル:

Ext.define('SkSe.model.PlacesLocal',{
    extend:'Ext.data.Model',
    config:{
        fields:['id', 'name','icon','required_stamps', 'active_stamps','description', 'campaign_id', 'user_favorites' , 'live_action_number'],
         proxy: {
        type: 'localstorage',
        id  : 'local-places-id'

    }

    }

});

店:

Ext.define('SkSe.store.PlacesLocal', {
    extend:'Ext.data.Store',
    config: {
        storeId: 'PlacesLocal',
        model: "SkSe.model.PlacesLocal",
         sorters: 'name',
        grouper: {
            groupFn: function (item) {
                return item.get('name')[0];
            }
        }, 
        groupDir: 'DESC'


    }
});

オフライン - オンライン ストアの同期:

Ext.define('SkSe.store.Places',{
    extend:'Ext.data.Store',

    config:{

        autoLoad:true,
        autoSync:true, 
        model:'SkSe.model.Places',
        sorters: 'name',
        grouper: {
            groupFn: function (item) {
                return item.get('name')[0];
            }
        }, 
        groupDir: 'DESC',
        proxy:{
            type:'ajax',
            url:'http://localhost/campaigns/',
            reader:{
                type:'json',
                //name of array where the results are stored
                rootProperty:'results'
            }
        },

        listeners: {
                load: function() {

                    var PlacesLocal = Ext.data.StoreManager.lookup('PlacesLocal');
                    // Clear proxy from offline store

                      if (navigator.onLine) {
                   console.log("Hm");

                    // Loop through records and fill the offline store
                    this.each(function(record) {

                        PlacesLocal.add(record.data);

                    });

                    // Sync the offline store
                    PlacesLocal.sync();
                      }
                }

    }
    }
});

どうやら placeLocalstore はデータを取得しますが、何らかの理由で localstorage に保存されません。

キー local-places-id は localstorage に表示されますが、データはありません。

4

2 に答える 2

3

問題は、あなたがそれをするときだと思います:

PlacesLocal.add(record.data);

に値を持つidフィールドがありますrecord.data。したがって、レコードは新しいとは見なされません。変更されていないため、変更されたとは見なされず、削除されたとは見なされません (説明は読者への演習として残されています)。

つまり、ストアの場合、同期するものは何もありません。作戦完了。

メソッドgetNewRecordsで使用されるのコードは次のとおりです。sync

function() {
    return this.data.filterBy(function(item) {
        // only want phantom records that are valid
        return item.phantom === true && item.isValid();
    }).items;
}

今までに何をする必要があるかを推測したと思いますが、大声で話させてください:

var recordsData = store.getRange().map(function(record) { return record.data }),
    newRecords = PlacesLocal.add(recordsData);

Ext.each(newRecords, function(record) {
    record.phantom = true;
});

// Now it should have plenty of work!
PlacesLocal.sync();
于 2013-07-25T23:19:29.313 に答える
0

実際問題は ID にあるため、copy メソッドを使用して問題を解決します。

// Loop through records and fill the offline store
this.each(function (item, index, length){
    var newItem = item.copy()
    PlacesLocal.add(newItem);

});
于 2014-04-14T00:54:54.803 に答える