JayData/Phonegap在iPad模拟器中工作,但不是iPad设备
问题描述:
我正在做一个使用以下博客作为代码库的概念验证应用程序。JayData/Phonegap在iPad模拟器中工作,但不是iPad设备
http://jaydata.org/blog/how-to-check-if-your-websql-environment-is-working
当我运行使用的XCode 4.6.1的iPad模拟器6.1以下,我可以看到预期的输出。
[LOG] Received Event: deviceready
[LOG] begin testing
[LOG] define Department Entity
[LOG] define Employee Entity
[LOG] saving Entity done.
但是,当我通过USB运行下列实际iPad设备时,其输出结束于“定义部门实体”。我没有看到任何错误;这里是console.log输出:
[LOG] Received Event: deviceready
[LOG] begin testing
[LOG] define Department Entity
任何帮助将不胜感激。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<title>Hello World</title>
<!--jQuery-->
<script type="text/javascript" src="jquery/jquery-1.7.2.js"></script>
<script type="text/javascript" src="jquery/jquery.mobile-1.1.1.js"></script>
<!--jayData and the different providers used-->
<script type="text/javascript" src="js/JayData-1.2.7.1/JayData.js"></script>
<script type="text/javascript" src="js/JayData-1.2.7.1/jaydataproviders/SqLiteProvider.js"></script>
<!--PhoneGap-->
<script type="text/javascript" src="cordova-2.5.0.js"></script>
</head>
<body>
<div class="app">
<h1>Apache Cordova</h1>
<div id="deviceready" class="blink">
<p class="event listening">Connecting to Device</p>
<p class="event received">Device is Ready</p>
</div>
</div>
<script type="text/javascript" src="cordova-2.5.0.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
app.initialize();
</script>
<script type="text/javascript">
var jqmReady = $.Deferred(),
pgReady = $.Deferred();
// mobileinit does not work. pageinit works.
// jqm ready
$(document).bind("pageinit", jqmReady.resolve);
// phonegap ready
document.addEventListener("deviceready", pgReady.resolve, false);
// all ready :)
$.when(jqmReady, pgReady).then(function() {
console.log('begin testing');
console.log('define Department Entity');
$data.Entity.extend("$org.types.Department",
{
Id: { type: "int", key: true, computed: true },
Name: { type: "string", required: true },
Employees: {
type: Array,
elementType: "$org.types.Employee",
inverseProperty: "Department"
}
});
console.log('define Employee Entity');
$data.Entity.extend("$org.types.Employee",
{
Id: { type: "int", key: true, computed: true },
Name: { type: "string", required: true },
Department: { type: $org.types.Department, inverseProperty: 'Employees' }
});
$data.EntityContext.extend("$org.types.OrgContext", {
Department: { type: $data.EntitySet, elementType: $org.types.Department },
Employee: { type: $data.EntitySet, elementType: $org.types.Employee }
});
$org.context = new $org.types.OrgContext({
name: "webSql", databaseName: "OrgDatabase",
dbCreation: $data.storageProviders.DbCreationType.DropTableIfChanged
});
var department = new $org.types.Department({ Name: 'Department1' });
var employee = new $org.types.Employee({ Name: 'John Smith' });
department.Employees = [employee];
$org.context.onReady(function() {
$org.context.Department.add(department);
$org.context.saveChanges();
});
console.log('saving Entity done.');
});
</script>
</body>
</html>
答
回答了jaydata论坛,但我复制到这里,也许别人会搜索此
要点:1。 使用jQuery 1.8+,1.7不支持。如果你必须使用1.7,那么请使用q承诺,请告诉我们,如果你有任何问题 2.可惜的是,你只能预订onload事件后deviceready事件....
此代码的工作为我们在iPad上6.1
(function main() {
var jqmReady = $.Deferred();
var pgReady = $.Deferred();
// mobileinit does not work. pageinit works.
// jqm ready
$(document).bind("pageinit", jqmReady.resolve);
// phonegap ready
$.when($.ready)
.then(function(){
document.addEventListener("deviceready", pgReady.resolve, false);
});
var Employee = $data.define('Employee', {
Id: { type: "int", key: true, computed: true },
Name: { type: "string", required: true },
Department: { type: "Department", inverseProperty: 'Employees' }
});
var Department = $data.define('Department', {
Id: { type: "int", key: true, computed: true },
Name: { type: "string", required: true },
Employees: { type: Array, elementType: "Employee", inverseProperty: 'Department' }
});
var OrgDatabase = $data.EntityContext.extend('OrgDatabase', {
Departments: { type: $data.EntitySet, elementType: Department },
Employees: { type: $data.EntitySet, elementType: Employee }
});
var context = new OrgDatabase({name: 'webSql', databaseName: 'OrgDatabase', dbCreation: $data.storageProviders.DbCreationType.DropTableIfChanged});
// all ready :)
$.when(jqmReady, pgReady, context.onReady()).then(function() {
var employee = new Employee({ Name: 'John Smith' });
var department = new Department({ Name: 'Department1' });
department.Employees = [employee];
context.Departments.add(department);
context.saveChanges(function() {
alert('saving Entity done.');
});
});
})()
答
我用Web Inspector,发现iPad上的应用程序无法加载“JayData.js”。
事实证明,实际的js文件具有全小写字符的文件名。因此,解决方法是将“JayData.js”更改为“jaydata.js”,并且该应用程序可在iPad上运行。
如果你使用phonegap,为什么你需要jaydata? Phonegap拥有自己的[数据库](http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html)。 – Maxbester 2013-03-20 10:30:50