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

QQ登录

只需一步,快速开始

查看: 1422|回复: 6

[处理中3] sqlite

[复制链接]

12

主题

24

帖子

90

积分

初级会员

Rank: 2

积分
90
QQ
发表于 2016-4-13 11:35:47 | 显示全部楼层 |阅读模式
  1. define(function(require){
  2.     var $ = require("jquery");
  3.     var justep = require("$UI/system/lib/justep");
  4.     var ShellImpl = require("$UI/system/lib/portal/shellImpl");   
  5.     var PadDB = require("$UI/padDemo/padDB");
  6.     var SqliteUtil = require("$UI/padDemo/sqliteUtil");
  7.     var Data = require("$UI/system/components/justep/data/data");
  8.     require("$UI/system/lib/cordova/cordova");
  9.     require("cordova!org.apache.cordova.network-information");
  10.    
  11.         
  12.     var Model = function(){
  13.         this.callParent();     
  14.     };
  15.    
  16.     Model.prototype.modelLoad = function(event){
  17.         var self = this;
  18.         document.addEventListener("deviceready", function() {
  19.             // 获取数据库单例对象
  20.             self.padDB = PadDB.getInstance();
  21.             // 初始化数据库
  22.             self.padDB.initData(function() {
  23.                 // 初始化成功后刷新tree
  24.                 self.comp("revealData").refresh();
  25.             });
  26.         });
  27.     };
  28.       
  29.     Model.prototype.revealDataCustomRefresh = function(event){
  30.         event.async = true;   
  31.         <font color="Red">var db = this.padDB.getDatabase(); 这句Cannot read property 'getDatabase' of undefined</font>
  32.         var revealData = this.comp("revealData");           
  33.             $.ajax({
  34.             async:"false",
  35.             type:"post",                        
  36.             url:"/pis/mobile/share/getHintList",
  37.             dataType : "json",
  38.             data:{TYPE:1},
  39.             success : function(result) {      
  40.                 revealData.loadData(result);
  41.                 //使用data组件的each方法把所有的行状态都改为编辑过的状态
  42.                 revealData.each(function(param){
  43.                         revealData.setRowState(param.row,Data.STATE.EDIT);
  44.                 });               
  45.               
  46.                 SqliteUtil.saveData(db, result, "tb_file", null, function(res) {
  47.                     // 异步执行模式下,保存成功后必须执行doSaveAfter
  48.                     data.doSaveAfter(true, event.options);
  49.                 }, function(msg) {
  50.                     data.doSaveAfter(false, event.options);
  51.                 });        
  52.             }
  53.         });
  54.     };

  55.         
  56.     return Model;
  57. });
复制代码
sqliteUtil   padDB.js 都是案例复制过来的 padDB.sql也是仿写案例的。
图像 1.png


发表于 2016-4-13 13:41:42 | 显示全部楼层
建议你真机调试看看
this.padDB 这个变量还没有初始化呢!!

应该是modelLoad  方法中  添加的监听事件deviceready 还没有执行呢,
self.padDB 并没有赋值呢,所以这个对象不存在!!

你要保证代码执行的先后顺序!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

12

主题

24

帖子

90

积分

初级会员

Rank: 2

积分
90
QQ
 楼主| 发表于 2016-4-14 08:54:20 | 显示全部楼层
liangyongfei 发表于 2016-4-13 13:41
建议你真机调试看看
this.padDB 这个变量还没有初始化呢!!

我试了 modelLoad 后执行,revealDataCustomRefresh先执行,那么有办法让modelLoad 先执行吗
回复 支持 反对

使用道具 举报

发表于 2016-4-14 11:38:30 | 显示全部楼层
duansiyu 发表于 2016-4-14 08:54
我试了 modelLoad 后执行,revealDataCustomRefresh先执行,那么有办法让modelLoad 先执行吗
...

这个是页面生命周期的先后顺序问题!!不能变
你可以把data的autoLoad属性设置为false,然后再deviceready 事件中调用 self.como('dataXid').refreshData() 调用刷新!

保证环境先准备好再调用刷新就没问题了!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

12

主题

2627

帖子

2866

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2866
发表于 2016-4-14 13:39:28 | 显示全部楼层
建议先看看http://doc.wex5.com/page-lifecycle/
理解一下这些事件的执行顺序
回复 支持 反对

使用道具 举报

12

主题

24

帖子

90

积分

初级会员

Rank: 2

积分
90
QQ
 楼主| 发表于 2016-4-14 14:00:54 | 显示全部楼层
liangyongfei 发表于 2016-4-14 11:38
这个是页面生命周期的先后顺序问题!!不能变
你可以把data的autoLoad属性设置为false,然后再deviceready ...

Model.prototype.modelLoad = function(event){
        var self = this;
        document.addEventListener("deviceready", function() {
            // 获取数据库单例对象
            self.padDB = PadDB.getInstance();
            // 初始化数据库
            self.padDB.initData(function() {
                // 初始化成功后刷新tree
                self.comp("revealData").refreshData(true);
            });
        });
    };


为什么执行完这个 模拟器APP一闪就退出了
回复 支持 反对

使用道具 举报

发表于 2016-4-14 15:04:18 | 显示全部楼层
duansiyu 发表于 2016-4-14 14:00
Model.prototype.modelLoad = function(event){
        var self = this;
        document.addEventLi ...

直接调用:
self.comp("revealData").refreshData();
你在哪儿见到过data.refreshData(true)  这样的写法??

另外,建议真机调试看看,具体执行到那行代码出错的!

看你1楼代码没问题!只需要把revealData 的autoLoad属性设置为false即可!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 03:30 , Processed in 0.062779 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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