带有Ripple的io.litehelpers.cordova.sqlite sqliteplugin.js

时间:2015-07-22 07:07:18

标签: cordova ripple

我正在开发基于cordova的混合移动应用程序,使用VS 2013,sqliteplugin.js(io.litehelpers.cordova.sqlite),angularjs,jquerymobile,Ripple,用于在开发期间运行应用程序。

我添加了sqliteplugin,这是我的index.html文件

<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/lib/qunit.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/lib/json2.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/lib/lawnchair.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/www/SQLitePlugin.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/Lawnchair-sqlitePlugin.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/lawnchair-spec.js"></script>

function onDeviceReady() {
    // Handle the Cordova pause and resume events
    document.addEventListener('pause', onPause.bind(this), false); //jshint ignore:line
    document.addEventListener('resume', onResume.bind(this), false); //jshint ignore:line
    appObj.spa.status.deviceReady = true;
    appObj.spa.status.cordovaReady = appObj.spa.api.cordova.cordovaReady();
    appObj.spa.api.angular.bootstrap();

下面是我创建数据库然后在其中创建表的代码..

    // TODO: Cordova has been loaded. Perform any initialization that requires Cordova here.
    db = window.sqlitePlugin.openDatabase('vitaegodb', '1.0', 'VITAE_Go_Db', 200000);
    db.transaction(createTables, errorCB, successCB);

}

function createTables(tx){

    var createtblActivityCancel = "CREATE TABLE IF NOT EXISTS [tblActivityCancel]([ActivityId] [nvarchar](50) NOT NULL,[DayPlanId] [int] NOT NULL,[WorklistId] [nvarchar](255) NOT NULL,[ResourceId] [int] NOT NULL,[ReasonId] [int] NOT NULL,[Remark] [nvarchar](255) NULL,[ChangeState] [int] NOT NULL,[Synchronized] [bit] NOT NULL,CONSTRAINT [PK_tblActivityCancel] PRIMARY KEY([ActivityId],[DayPlanId]));";


    tx.executeSql(createtblActivityCancel);

}

现在,我正在获得一个弹出窗口“I haz CheezBurger ??”涟漪说:“我们似乎错过了一些东西:(”

同样在sqliteplugin.js文件中,它在下面的函数中是一个例外:

 mycb = function(result) {
  var last, q, r, res, type, _i;
  last = result.length - 1;
  for (i = _i = 0; 0 <= last ? _i <= last : _i >= last; i = 0 <= last ? ++_i : --_i) {
    r = result[i];
    type = r.type;`enter code here`
    res = r.result;
    q = mycbmap[i];
    if (q) {
      if (q[type]) {
        q[type](res);
      }
    }
  }
};

我发现结果是未定义的,因此当它试图找到时 last = result.length - 1;
它是thrwing异常,找不到undefined的长度。 纹波错误 ![SQLiteplugin.js文件的例外] [1]

1 个答案:

答案 0 :(得分:1)

插件io.litehelpers.cordova.sqlite提供了一个原生 SQLite数据库的接口。这意味着对于每个支持的平台(Android,iOS,Windows等),插件的JS部分都会调用本机代码。

Ripple是一个支持大多数Cordova / Phonegap API但不是实际平台的模拟器,因此它无法执行本机代码。

因此,当您看到“I haz Cheeseburger”消息时,Ripple实际上是在说“您正在调用一些我无法理解的本机代码”。

换句话说,你不能使用在Ripple中调用本机代码的这个(或任何)插件。

如果你想在Ripple中测试数据库,你最好的办法是在Ripple环境中添加一些条件逻辑来使用WebSQL数据库,因为它的接口与通过插件的原生SQLite数据库相同。