我认为问题在于这个 around 子句:
this.around(function(callback) {
var context = this;
url = 'http://localhost:3000/api.json?school=' + localStorage.school
this.load(url)
.then(function(data) {
parsed = JSON.parse(data);
//if (parsed.meta != undefined) {
// alert(parsed.meta.message);
//}
context.products = parsed.products;
context.places = parsed.places;
context.school = parsed.school;
context.title = $('[data-role=header] h1');
})
.then(callback); // *** this won't get called if load() rejects promise
});
据我了解,around子句是用回调()调用的,它会在调用时继续加载路由。
我认为你的承诺链有问题。如果 load() 返回一个被拒绝的 Promise(可能是这样,因为您的手机上没有 localhost:3000),那么您的 then() 函数都不会加载。因此,不会调用 callback() 并且应用程序“停止”。我会建议(a)在那里添加一些错误处理,这样你就可以看到它发生了什么,并且绝对(b)无论 load() 的结果如何都执行回调。此外 - 如果数据不是正确的 JSON 编码字符串,JSON.parse(data) 将引发错误 - 您也需要尝试/捕获。
我会试试这个:
this.load(url)
.then(function(data) {
try {
parsed = JSON.parse(data);
} catch(e) {
console.log('error decoding json!: '+errorMsg);
}
//if (parsed.meta != undefined) {
// alert(parsed.meta.message);
//}
context.products = parsed.products;
context.places = parsed.places;
context.school = parsed.school;
context.title = $('[data-role=header] h1');
},function(errorMsg){
console.log('error loading json!: '+errorMsg);
})
.fin(callback); // *** fin() is meant to execute on both success and error, like a "finally".
如果你的 Promise 实现不支持 fin(),请查看它所称的等价物。它本质上是以下的简写:.then(callback).otherwise(callback)
长话短说-您要确保无论如何都会执行传递给 around 的回调,否则您的应用程序将不会继续加载路由,这似乎是您的意外行为。
至于无法看到控制台的问题,我不确定您的环境是什么样的,但我过去在 Eclipse 和 ADT 方面取得了成功——我可以看到控制台日志和错误。