gpt4 book ai didi

javascript - Sammyjs 路由不适用于 Phonegap

转载 作者:搜寻专家 更新时间:2023-11-01 04:37:28 25 4
gpt4 key购买 nike

我用 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>

我创建了一个 gist使用我的应用程序 sammy javascript(包括路线)。

最佳答案

我认为问题在于这个 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 子句是通过 callback() 调用的,它会在调用时继续加载路由。

我认为您的 promise 链存在问题。如果 load() 返回一个被拒绝的 promise(可能会这样,因为你的手机上没有 localhost:3000),那么你的 then() 函数都不会加载。因此,不会调用 callback() 并且应用程序会“停止”。我会建议 (a) 在那里添加一些错误处理,这样你就可以看到它发生了什么,并且肯定 (b) 无论 load() 的结果如何都执行回调。此外 - 如果 data 不是正确的 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".

如果您的 promises 实现不支持 fin(),请查看它调用的等效项。它本质上是以下内容的简写:.then(callback).otherwise(callback)

长话短说 - 您要确保无论如何都会执行传递给周围的回调,否则您的应用将不会继续加载路由,这似乎是您的意外行为。

至于看不到控制台这一点,我不确定你的环境是什么样的,但我过去在 Eclipse 和 ADT 上取得过成功——我可以很好地看到控制台日志和错误。

关于javascript - Sammyjs 路由不适用于 Phonegap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18300338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com