Sencha Touch - автономное приложение с offlineStorage синхронизируется с интернет-магазином. Получить онлайн данные по запросу и добавить в offlineStoreage - PullRequest
1 голос
/ 20 ноября 2011

Я просто работаю над веб-приложением с Sencha Touch.Мне нужно реализовать хранилище (привязанное к сетке), которое доступно в автономном режиме (offlineStorage), но получает и обновляет данные в Интернете (REST), как только подключение к Интернету становится доступным.Это необходимо, поскольку у меня много данных, и я много занимаюсь удаленной фильтрацией и поиском в магазине.Я не могу загрузить полный магазин с самого начала, потому что он слишком большой.Предпочтительно я хотел бы использовать offlineStore для быстрого взаимодействия с пользователем.Новые фильтры / запросы должны запрашивать данные с сервера (онлайн-магазина) и обновлять / добавлять их в offlineStorage для синхронизации с сервером.

Grid <-bind-> Store (offlineStorage) <-request remoteданные о новом фильтре-> Интернет-магазин

Для меня отправной точкой является http://www.sencha.com/learn/taking-sencha-touch-apps-offline/#leave-reply. Однако мне нужно запустить онлайн-магазин, как только данные будут загружены из автономного хранилища или установлен фильтр.

Кто-нибудь еще реализовывал что-то подобное?Любые советы / идеи, как это реализовать?

Я очень ценю вашу помощь !!

1 Ответ

3 голосов
/ 21 ноября 2011

В Sencha Touch действительно очень просто «синхронизировать» и онлайн-магазин с извлеченными данными в другой «автономный» магазин.

Определение автономного магазина:

    // Offline store (local storage)
    var schouwLijstOffline = new Ext.data.Store({
        model: "schouwLijst",
        storeId: 'schouwLijstOffline',
        proxy: {
            type: 'localstorage',
            id: "schouwid"
        },
    });

Теперь вы можете использовать прослушиватель в вашем главном хранилище (первая выборка данных) и прослушивать событие загрузки (в данном случае вызванное вручную из-за 'autoLoad: false'.

В загрузчике вы 'очищаете ()' прокси автономного хранилища, а затем заполняете автономное хранилище данными с помощью функции storeId '* .add () *.

В моем примере я затем удаляю всю информацию из «оффлайн-хранилища», так как она мне больше не нужна (сейчас она находится в автономном режиме.

Интернет-магазин со слушателем:

var schouwLijstStore = new Ext.data.Store({

            model: "schouwLijst",
            storeId: "schouwLijstStore",
            proxy: {
                type: 'ajax',
                url: 'php/json.php?t=list',
                reader: {
                    type: 'json',
                    root: 'list'
                },   
            },    
            autoLoad: false,
            listeners: {
                load: function() {

                    // Clear proxy from offline store
                    schouwLijstOffline.proxy.clear();

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

                        schouwLijstOffline.add(record.data);

                    });

                    // Sync the offline store
                    schouwLijstOffline.sync();

                    // Remove data from online store
                    schouwLijstStore.removeAll();

                }

            }

        });

Теперь, когда вы делаете новый запрос на выборку новых фильтров / данных, вы можете повторить тот же процесс:

  • Запуск интернет-магазина (storeId.update ();)
  • Слушатель добавляет данные из интернет-магазина в офлайн-магазин
  • Используйте оффлайн-магазин

Справочная:

Чтобы удалить все данные из хранилища, вы можете использовать: storeId.removeAll ();

Думаю, это поможет вам в правильном направлении, если что-то неясно, скажите, пожалуйста.

...