問題はこの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() で呼び出され、呼び出されたときにルートのロードを続行します。
あなたのプロミスチェーンに問題があると思います。load() が拒否された promise を返した場合 (携帯電話に localhost:3000 がないため、おそらくそうなります)、 then() 関数はどちらも読み込まれません。そのため、callback() は呼び出されず、アプリは「停止」します。(a) そこにエラー処理を追加して、何が起こっているかを確認し、(b) load() の結果に関係なくコールバックを実行することをお勧めします。また、JSON.parse(data) は、データが適切な JSON でエンコードされた文字列でない場合にエラーをスローします。それについても、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)
簡単に言うと、 around に渡されたコールバックが何があっても実行されるようにするか、アプリがルートのロードを続行しないようにする必要があります。これは、予期しない動作のようです。
コンソールが表示されないという点については、あなたの環境がどのように見えるかはわかりませんが、過去に Eclipse と ADT で成功したことがあります。コンソールのログとエラーは問題なく表示されます。