我与SammyJs建立了一个应用程序。它目前在浏览器中完美运行。但是,当我使用PhoneGap将其打包到Android时,路由不再起作用了。
我找到了this SO question。但是,给出的解决方案不起作用:
(function($) {
var app = $.sammy('[role=main]', function() {
this.disable_push_state = true;
...
});
}
有没有人遇到过同样的问题?
修改
我也使用jquery mobile和以下脚本来禁用其路由:
<script type="text/javascript">
// DISABLE JQM ROUTER
$(document).bind("mobileinit", function () {
$.mobile.ajaxEnabled = false;
$.mobile.linkBindingEnabled = false;
$.mobile.hashListeningEnabled = false;
$.mobile.pushStateEnabled = false;
$.mobile.changePage.defaults.changeHash = false;
});
</script>
我使用我的应用程序sammy javascript(包括路线)创建了gist。
答案 0 :(得分:1)
我认为问题在于这个条款:
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子句是用callback()调用的,它会在调用时继续加载路由。
我认为您的承诺链存在问题。如果load()返回被拒绝的promise(可能是这样,因为手机上没有localhost:3000),那么你的then()函数都不会加载。因此,不调用callback()并且应用程序“停止”。我建议(a)在那里添加一些错误处理,这样你就可以看到它发生了什么,并且肯定(b)执行回调而不管load()的结果。另外 - 如果数据不是一个正确的JSON编码字符串,JSON.parse(data)将抛出一个错误 - 你也想要一个try / catch。
我会试试这个:
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".
如果您的promises实现不支持fin(),请查找它所谓的等效内容。它基本上是:.then(callback).otherwise(callback)
长话短说 - 您希望确保传递给周围的回调无论如何都会执行,或者您的应用不会继续加载路线,这就是您的意外行为。
关于无法看到控制台的问题,我不确定你的环境是什么样的,但我过去在Eclipse和ADT方面取得了成功 - 我可以看到控制台日志和错误。