/ / Sencha Touch - Офлайн-додаток із системою offlineStorage, синхронізованою з інтернет-магазином. Отримати дані онлайн за запитом та додати до offlineStoreage - extjs, sencha-touch, extjs4, store, sencha-touch-2

Sencha Touch - офлайн-додаток з offlineStorage синхронізовано з інтернет-магазином. Отримуйте онлайн-дані за запитом і додайте їх до офлайнЗавантаження - extjs, sencha-touch, extjs4, store, sencha-touch-2

Я просто працюю над веб-додатком із сенчамидотик. Мені потрібно впровадити магазин (прив’язаний до сітки), який доступний у режимі офлайн (offlineStorage), але отримує та оновлює дані в Інтернеті (REST), як тільки доступне інтернет-з'єднання. Це необхідно, оскільки у мене дуже багато даних і я роблю багато віддаленої фільтрації та пошуку в магазині. Я не можу завантажити повний магазин із самого початку, оскільки він занадто великий. Переважно я б хотів використовувати offlineStore для швидкого користувацького досвіду. Нові фільтри / запити повинні запитувати дані з сервера (інтернет-магазину) та оновлювати / додавати їх до offlineStorage, щоб синхронізуватись із сервером.

Grid <-bind-> Store (offlineStorage) <-запросити віддалені дані на новому фільтрі-> Інтернет-магазин

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

Хтось ще реалізував щось подібне? Будь-які підказки / ідеї, як це реалізувати?

Я дуже ціную вашу допомогу !!

Відповіді:

3 для відповіді № 1

У 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 ();

Я думаю, це допоможе вам у правильному напрямку, якщо щось незрозуміле, скажіть так.