起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: 邹胖胖

[结贴] app离线存储有具体的案例吗?

[复制链接]
发表于 2017-7-13 10:49:30 | 显示全部楼层
邹胖胖 发表于 2017-7-13 09:52
我现在用的oracle,所有操作数据库的地方都是在baas里面写的自定义action,这个有什么影响吗?有些地方是 ...

可以!,那建议您使用data组件实现吧!
不要使用baasData组件了!
参考:http://docs.wex5.com/wex5-ui-question-list-2174
/UI2/demo/acc_data/list.w
这个是保存到baasServer

/UI2/demo/sqlite/simpleData/index.w
这个是保存本地sqlite

自己接管data组件的 onCustomRefresh  和  onCustomSave 事件!
在事件中判断网络是否连接??
从而决定  和 什么数据源进行数据交互!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

165

主题

626

帖子

1160

积分

金牌会员

Rank: 6Rank: 6

积分
1160
QQ
 楼主| 发表于 2017-7-13 11:12:56 | 显示全部楼层
liangyongfei 发表于 2017-7-13 10:49
可以!,那建议您使用data组件实现吧!
不要使用baasData组件了!
参考:http://docs.wex5.com/wex5-ui-q ...

我一直都是用的data没用Baasdata。你说的  
“自己接管data组件的 onCustomRefresh  和  onCustomSave 事件!
在事件中判断网络是否连接??
从而决定  和 什么数据源进行数据交互!”  
这儿我没怎么明白,我的自定义action中业务比较复杂,不会单纯的给个表名就能完成业务保存操作了,所以前台不涉及任何有关数据源的东西,所有操作有数据库的设定都是在action里面去指定的。你说的onCustomRefresh  和onCustomSave ,我是不是就用不上了?我是在监听事件里面判断是否有网络,有网络了后再去检查sqlite里面是不是有没有保存的数据,有数据了以后就去做数据同步,同步完成后再清理sqlite和停止监听事件。
回复 支持 反对

使用道具 举报

发表于 2017-7-13 12:00:57 | 显示全部楼层
邹胖胖 发表于 2017-7-13 11:12
我一直都是用的data没用Baasdata。你说的  
“自己接管data组件的 onCustomRefresh  和  onCustomSave 事 ...

onCustomRefresh 和 onCustomSave 就是接管data组件查询和保存的事件!不管再复杂,也应该在这个事件中实现的!
sqlite 判断网络是否连接,最终返回一个Boolean 类型的值即可!
比如return true 或 return false
你查询或保存的时候,根据这个变量的值!决定是请求服务器?还是请求sqlite!
这就是总体思路!

你的业务再复杂也是数据库的增删改查嘛!

就是 写两份代码,一份请求服务器!一份请求本地数据库!
通过网络判断!执行哪份代码就行了!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

165

主题

626

帖子

1160

积分

金牌会员

Rank: 6Rank: 6

积分
1160
QQ
 楼主| 发表于 2017-7-13 12:06:16 | 显示全部楼层
liangyongfei 发表于 2017-7-13 12:00
onCustomRefresh 和 onCustomSave 就是接管data组件查询和保存的事件!不管再复杂,也应该在这个事件中实 ...

意思就是当判断到网络已连接了后,就去调用data组件的onCustomSave 方法去执行业务保存是吧?那你说的那个判断服务器和客户端状态的思路我这里就不需要了是么?
回复 支持 反对

使用道具 举报

发表于 2017-7-13 14:00:16 | 显示全部楼层
邹胖胖 发表于 2017-7-13 12:06
意思就是当判断到网络已连接了后,就去调用data组件的onCustomSave 方法去执行业务保存是吧?那你说的那 ...

数据报错调用data.saveData() 即可,就会触发onCustomSave 事件的

那个是为了数据同步用的!
因为如果是多个客户端的话!不确定服务器和当前客户端,哪里的数据是最新的! 所以才这样做的!比较版本号大写,确定哪里的数据是最新的!
如果客户端的数据还没有服务器数据新!为啥还要覆盖服务器数据呢?
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

165

主题

626

帖子

1160

积分

金牌会员

Rank: 6Rank: 6

积分
1160
QQ
 楼主| 发表于 2017-7-13 15:14:36 | 显示全部楼层
liangyongfei 发表于 2017-7-13 14:00
数据报错调用data.saveData() 即可,就会触发onCustomSave 事件的

那个是为了数据同步用的!

好的。谢谢。
回复 支持 反对

使用道具 举报

165

主题

626

帖子

1160

积分

金牌会员

Rank: 6Rank: 6

积分
1160
QQ
 楼主| 发表于 2017-7-14 11:32:48 | 显示全部楼层
liangyongfei 发表于 2017-7-13 14:00
数据报错调用data.saveData() 即可,就会触发onCustomSave 事件的

那个是为了数据同步用的!

坛主我再问下啊,
一、因为我涉及到业务的页面都要做离线同步,用sqlite一是太复杂,几十张表都要在sqlite里面去建,我有点懒。二是我担心这样来回存取处理速度会很慢,我想之间将离线数据放在一个data中,有网了以后在取出来去调用action存到服务器上去,这样会不会有什么问题?因为我目前的环境还无法访问公司的内网,正式环境测试又太麻烦,所以暂时还没办法真机测试;
二、我不太懂的就是,假如现在没有网络了,那我的点击事件还能被触发吗?
回复 支持 反对

使用道具 举报

发表于 2017-7-14 14:13:13 | 显示全部楼层
邹胖胖 发表于 2017-7-14 11:32
坛主我再问下啊,
一、因为我涉及到业务的页面都要做离线同步,用sqlite一是太复杂,几十张表都要在sqlit ...

1.离线数据放在一个data中 没问题!但是data组件是存储在缓存中的!  相当于js中的一个数组js对象!
当APP退出,或者杀进程的时候!数据就会丢失的! 如果想做离线存储!建议还是存储在sqlite中吧!

2.点击事件 和网络没关系的啊! 

qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

165

主题

626

帖子

1160

积分

金牌会员

Rank: 6Rank: 6

积分
1160
QQ
 楼主| 发表于 2017-7-14 15:55:19 | 显示全部楼层
liangyongfei 发表于 2017-7-14 14:13
1.离线数据放在一个data中 没问题!但是data组件是存储在缓存中的!  相当于js中的一个数组js对象!
当 ...

好的好的
回复 支持 反对

使用道具 举报

165

主题

626

帖子

1160

积分

金牌会员

Rank: 6Rank: 6

积分
1160
QQ
 楼主| 发表于 2017-7-14 18:05:36 | 显示全部楼层
liangyongfei 发表于 2017-7-14 14:13
1.离线数据放在一个data中 没问题!但是data组件是存储在缓存中的!  相当于js中的一个数组js对象!
当 ...

你好坛主,网络检测插件的调用,我看着文档用navigater.connection和navigater.network.connection都报未定义错误,相关的cordova插件我也引用了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-7-11 19:25 , Processed in 0.055561 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表