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

QQ登录

只需一步,快速开始

查看: 7049|回复: 15

[暂结贴(7天未回复)] 按案例做显示错误框“accDB is not defined”

  [复制链接]

21

主题

75

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
QQ
发表于 2016-3-20 14:31:48 | 显示全部楼层 |阅读模式
按案例(记账本)做添加实例可以,
1.png

但显示记录就出现错误框:
2.png 3.png

代码:
define(function(require){
        var $ = require("jquery");
        var justep = require("$UI/system/lib/justep");
        var AccDB = require("$UI/hello/accDB");
        var SqliteUtil = require("$UI/demo/sqlite/sqliteUtil");
        var Model = function(){
                this.callParent();
        };

        Model.prototype.modelLoad = function(event){
                var me=this;
                window.accDB=AccDB.getInstance();
                //accDB.initData();
                accDB.initData(function() {
                                // 初始化后刷新列表
                                me.comp("list1").refresh(true);
                        });
        };

        Model.prototype.data1CustomRefresh = function(event){
         //标记当前刷新是异步执行的
                event.async = true;
                var db = accDB.getDatabase();
                var data = event.source;
                var append = event.options && event.options.append; // 是否数据追加模式
                var limit = event.limit; // 分页行数
                var offset = event.offset; // 分页偏移
                // 执行SQL查询
                SqliteUtil.executeSql(db, "SELECT * FROM account LIMIT ? OFFSET ? ", [ limit, offset ], onSuccess, onError);
                function onSuccess(res) {
                        // 转换返回数据结果
                        var table = SqliteUtil.rowsToTable(res.rows);
                        if (offset==0) {
                                // 如果偏移为零则表明加载第一页,需要在Table中提供总行数,用于分页计算
                                SqliteUtil.executeSql(db, "SELECT COUNT(*) cnt FROM account ", [], function(res) {
                                        SqliteUtil.setTableTotal(table, res.rows.item(0).cnt);
                                        doRefreshData();
                                });
                        } else {
                                doRefreshData();
                        }
                        function doRefreshData() {
                                data.loadData(table, append);
                                // 异步执行模式下,加载数据后必须执行doRefreshAfter
                                data.doRefreshAfter(true, event.options);
                        }
                }
                function onError(msg) {
                        data.doRefreshAfter(false, event.options);
                }
        };

        return Model;
});

请指点一下,谢谢!!

21

主题

75

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
QQ
 楼主| 发表于 2016-3-20 19:24:21 | 显示全部楼层
window.accDB=AccDB.getInstance();
this.accDB.initData(function() {//???????
                                // 初始化后刷新列表
                                me.comp("list1").refresh(true);
                        });


Model.prototype.data1CustomRefresh = function(event){
         //标记当前刷新是异步执行的
                event.async = true;
                var db = this.accDB.getDatabase();///?????
                var data = event.source;

如果在accDB加上“this”就显示这个错误框“Cannot read property 'getDatabase' of undefined”

回复 支持 反对

使用道具 举报

2

主题

7

帖子

43

积分

新手上路

Rank: 1

积分
43
QQ
发表于 2016-3-20 20:48:11 | 显示全部楼层
在demoDB.js中
用浏览器调试用这句:                this.database = window.openDatabase("X5_DEMO_DB", null, null, -1);
用手机调试用这句:                this.database = window.sqlitePlugin.openDatabase({name : "X5_DEMO_DB"});
回复 支持 反对

使用道具 举报

21

主题

75

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
QQ
 楼主| 发表于 2016-3-20 21:06:27 | 显示全部楼层
还是不行。
define(function(require) {
        var $ = require("jquery");
        var justep = require("$UI/system/lib/justep");
        var SqliteUtil = require("$UI/demo/sqlite/sqliteUtil");

        var _instance = null;

        var AccDB = function() {
//                在调试场景下,这里可以选择用HTML5的Web SQL Database,在Chrome浏览器远程调试时可以直接看到数据库内容
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                this.database = window.openDatabase("X5_ACC_DB", null, null, -1);//浏览器
        //        this.database = window.sqlitePlugin.openDatabase({name : "X5_ACC_DB"});//手机
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                /*
                this.database.transaction(function(tx) {
                        tx.executeSql("drop table demo_test");
                        tx.executeSql("drop table demo_region");
                });
                */
        };

        /**
         * 这里构建单例,为了让多个页面共用同一个数据连接,避免死锁
         */
        AccDB.getInstance = function() {
                if (!_instance) {
                        _instance = new AccDB();
                }
                return _instance;
        };

        /**
         * 获取数据库链接
         */
        AccDB.prototype.getDatabase = function() {
                return this.database;
        };

        /**
         * 这里给出一个自动判断并初始化数据库的方案
         */
        AccDB.prototype.initData = function(onSuccess) {
                var db = this.getDatabase();
                // 检查表是否已存在
                var sqlCheckExists = "SELECT count(*) AS cnt FROM sqlite_master WHERE type = 'table' AND UPPER(name) in ('ACCOUNT', 'ACCOUNT_CLASS') ";
                SqliteUtil.executeSql(db, sqlCheckExists, null, function(res) {
                        if (res.rows.item(0).cnt < 2) {
                                // 如果不存在则获取初始化脚本
                                require(["text!$UI/hello/account.sql"], function(data) {
                                        executeSqlFile(data);
                                });
                        } else {
                                doSuccess();
                        }
                });
                // 执行初始化脚本
                function executeSqlFile(content) {
                        var sqls = content.split(";");
                        SqliteUtil.executeBatch(db, sqls, null, function() {
                                doSuccess();
                        })
                }
                function doSuccess() {
                        if ($.isFunction(onSuccess)) {
                                onSuccess.call(this);
                        }
                }
        };

        return AccDB;
});

回复 支持 反对

使用道具 举报

发表于 2016-3-21 11:39:02 | 显示全部楼层
sqlite 属于cordova插件!
只要是关于cordova插件的使用,必须是打包在app中 ,安装到设备上才可以正常使用
浏览器又怎么能运行sqlite呢?
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

21

主题

75

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
QQ
 楼主| 发表于 2016-3-21 15:45:52 | 显示全部楼层
视频不是说可以在Chrome浏览器可以用吗?

//                在调试场景下,这里可以选择用HTML5的Web SQL Database,在Chrome浏览器远程调试时可以直接看到数据库内容
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                this.database = window.openDatabase("X5_ACC_DB", null, null, -1);//浏览器
        //        this.database = window.sqlitePlugin.openDatabase({name : "X5_ACC_DB"});//手机
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

而且我安装到手机还是一样显示错误框“accDB is not defined”,能不能远程帮一下?
回复 支持 反对

使用道具 举报

发表于 2016-3-21 16:50:39 | 显示全部楼层
yygy 发表于 2016-3-21 15:45
视频不是说可以在Chrome浏览器可以用吗?

//                在调试场景下,这里可以选择用HTML5的Web SQL ...

只要是关于cordova插件的方法,必须打包在app,安装后才可以运行!
浏览器运行的绝对不是cordova插件!
建议你还是真机调试来做吧!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

21

主题

75

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
QQ
 楼主| 发表于 2016-3-21 17:25:38 | 显示全部楼层
我安装到手机还是一样显示错误框“accDB is not defined”,能不能远程帮一下?这个问题搞了几天.
回复 支持 反对

使用道具 举报

21

主题

75

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
QQ
 楼主| 发表于 2016-3-21 21:29:02 来自手机 | 显示全部楼层
按案例Sqlite一步一步做,Sqlite文件夹是不是有其它设置?
回复 支持 反对

使用道具 举报

21

主题

75

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
QQ
 楼主| 发表于 2016-3-22 10:21:37 | 显示全部楼层
无标题.png
能说明白一 点吗?我是刚学的,明明是按例子(Sqlite)一步一步做的,怎么会是Web SQlL,而且什么 是Web SQl也不知道是什么。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 01:09 , Processed in 0.070718 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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