我正在创建一个新的ember应用程序。我想使用最新版本的ember-data。(ember-data 2.0)。我希望它是一个移动网络应用程序。因此,它必须处理可变的网络访问,甚至离线。我希望它将所有数据存储在本地,并在离线时使用这些数据,这样无论网络连接如何,用户都能获得相同的体验。
ember-data 2.0是否能够处理离线情况?我是不是只需要做一个适配器来检测离线/在线,然后再做...?
或者,我必须创建自己的中间层来隐藏对ember-data的离线处理吗?
有没有解决这个问题的库?我已经找到了一些,但是有没有最新版本的ember-data?
发布于 2015-09-11 04:22:26
如果设备将离线,并且用户将尝试转换到尚未加载模型的路由,则会出现错误。您需要自己处理这些情况。例如,您可以创建一个包含错误消息和刷新按钮的漂亮页面。为此,您需要:
首先,在应用程序路由中,创建错误操作(它将在模型钩子期间捕获错误),当错误发生时,将转换保存在内存中。不要试图为这个任务使用本地存储,它将只保存属性,而我们需要一个实际的转换对象。在控制器中使用window.failedTransition或inject并路由一个简单的对象,该对象将包含一个失败的转换。
actions: {
error: function (error, transition) {
transition.abort();
/**
* You need to correct this line, as you don't have memoryStorage
* injected. Use window.failedTransition, or create a simple
* storage, Iy's up to you.
*/
this.get('memoryStorage').set('failedTransition', transition);
return true; //This line is important, or the whole idea will not work
}
}其次,创建一个错误控制器和模板。在错误控制器定义动作中,retry
actions: {
retry: function () {
/**
* Correct this line too
*/
var transition = this.get('memoryStorage').getAndRemove('failedTransition');
if (transition !== undefined) {
transition.retry();
}
}
}最后,在error模板中显示状态和错误文本(如果有)以及一个按钮,其中包含用于重试转换的操作。
这是一个简单的解决方案,对于简单的情况(设备只离线几秒钟),也许你需要更复杂的东西。如果你想要你的应用程序在没有网络访问的情况下完全工作,那么你可能想要为所有的数据使用本地存储(有一个附加的https://github.com/funkensturm/ember-local-storage),并时不时地将其与服务器同步(即每10秒在后台同步数据)。不幸的是,我没有尝试过这样的事情,但我认为这是可能的。
https://stackoverflow.com/questions/32502236
复制相似问题