Я просто працюю над веб-додатком із сенчамидотик. Мені потрібно впровадити магазин (прив’язаний до сітки), який доступний у режимі офлайн (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 ();
Я думаю, це допоможе вам у правильному напрямку, якщо щось незрозуміле, скажіть так.