Myślę, że problem jest z tej klauzuli w okolicy:
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
});
Jak rozumiem, klauzula wokół jest wywoływana z wywołania zwrotnego(), która będzie kontynuować ładowanie trasę kiedy to się nazywa.
Myślę, że jest problem z łańcuchem obietnic. Jeśli load() zwróci odrzuconą obietnicę (która prawdopodobnie ma, ponieważ w telefonie nie ma lokalnego hosta: 3000), żadna z funkcji then() nie zostanie załadowana. W związku z tym wywołanie zwrotne() nie jest wywoływane, a aplikacja "zatrzymuje się". Radziłbym (a) dodać trochę obsługi błędów tam, żebyś mógł zobaczyć, co się dzieje, i zdecydowanie (b) wykonywanie wywołania zwrotnego, niezależnie od wyniku ładowania(). Ponadto - JSON.parse (dane) wygeneruje błąd, jeśli dane nie są prawidłowym łańcuchem zakodowanym przez JSON - chcesz spróbować/złapać to również.
chciałbym spróbować to:
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".
Jeśli realizacja obietnic nie obsługuje fin(), patrzeć, co to dzwoni jego odpowiednik. Jest to w gruncie rzeczy skrótowe dla: .then(callback).otherwise(callback)
Krótka historia - chcesz się upewnić, że wywołanie zwrotne przekazywane dookoła zostanie wykonane bez względu na to, czy aplikacja nie będzie kontynuować ładowania trasy, co jest przyczyną nieoczekiwanego zachowania użytkownika być.
Jeśli chodzi o brak możliwości zobaczenia konsoli, nie jestem pewien, jak wygląda twoje środowisko, ale w przeszłości miałem powodzenie z Eclipse i ADT - widzę logi konsoli i błędy w porządku.
Czy możesz podać kod, pod którym definiujesz trasy? – RoryKoehein
Uaktualniłem moją odpowiedź z istotą. –
Zmieniasz adres URL z localhost na prawą nazwę hosta/ip przed przesłaniem na telefon, prawda? 'url = 'http: // localhost: 3000/api.json? school =' + localStorage.school' – RoryKoehein