我正在尝试使用 2.2.1 制作一个基本的 Sencha Touch 应用程序,该应用程序将按照此示例脱机工作。到目前为止,我所拥有的或多或少是一些不同领域的直接克隆,并且在浏览器中运行良好。
例如,在 Chrome 上,localStorage
如果我关闭计算机的互联网连接,我可以看到存储的项目然后读取。但是在 iOS 上,我尝试将应用程序保存到主屏幕,并且在连接时效果很好。但是,一旦我将设备置于飞行模式,它localStorage
似乎是空的,我的列表也是空的。
我尝试过拥有 JSON 数据的本地副本,但这似乎并没有通过 存储在 iOS 上,cache.manifest
所以这也不是一个后备选项。有没有办法让它在 iOS 的浏览器/主屏幕上工作?谢谢你。
更新缓存的关键控制器代码如下(注意它与上面的示例匹配,但一些不同的模型/存储名称除外):
init: function () {
var onlineStore = Ext.getStore('Tables'),
localStore = Ext.create('Ext.data.Store', {
model: "MyApp.model.OfflineTable"
}),
me = this;
localStore.load();
/*
* When app is online, store all the records to HTML5 local storage.
* This will be used as a fallback if app is offline more
*/
onlineStore.on('refresh', function (store, records) {
// Get rid of old records, so store can be repopulated with latest details
localStore.getProxy().clear();
store.each(function(record) {
var rec = {
id: record.data.id,
text: record.data.text,
content: record.data.content,
group: record.data.group
};
localStore.add(rec);
localStore.sync();
});
console.log("Setting local store of size " + localStore.getCount());
console.log("Item 0 is " + localStore.getAt(0).data.text);
});
/*
* If app is offline a Proxy exception will be thrown. If that happens then use
* the fallback / local stoage store instead
*/
onlineStore.getProxy().on('exception', function () {
me.getTables().setStore(localStore); //rebind the view to the local store
console.log("Getting local store of size " + localStore.getCount());
console.log("Item 0 is " + localStore.getAt(0).data.text);
localStore.each(function(record) {
console.log(record);
});
localStore.load(); // This causes the "loading" mask to disappear
Ext.Msg.alert('Notice', 'You are in offline mode', Ext.emptyFn); //alert the user that they are in offline mode
});
}
从console.log
上面的调用中,我可以看到我localStorage
在浏览器和连接时看起来很棒,但在 iOS 上断开连接后为空(尽管在桌面上仍然可以离线)。
我的离线模型是:
Ext.define('MyApp.model.OfflineTable', {
extend: 'Ext.data.Model',
config: {
fields: [
"id",
"text",
"content",
"group"
],
identifier:'uuid', // needed to avoid console warnings!
proxy: {
type: 'localstorage',
id: 'offlineTableData'
}
}
});
我的在线模型很简单
Ext.define('MyApp.model.Table', {
extend: 'Ext.data.Model',
config: {
fields: [
"id",
"text",
"content",
"group"
]
}
});
最后我的商店是:
Ext.define('MyApp.store.Tables', {
extend: 'Ext.data.Store',
config: {
model: 'MyApp.model.Table',
proxy: {
timeout: 3000,
type: 'ajax',
url: /* DATA URL */
},
autoLoad: true
}
});