Pertanyaan Rute Sammyjs tidak berfungsi dengan Phonegap


Saya telah membuat aplikasi dengan SammyJs. Saat ini berfungsi dengan sempurna di browser. Namun, ketika saya mengemasnya ke Android menggunakan PhoneGap, rute tidak berfungsi lagi.

saya telah menemukan pertanyaan SO ini. Namun, solusi yang diberikan tidak berfungsi:

(function($) {

    var app = $.sammy('[role=main]', function() {
      this.disable_push_state = true;
      ...
    });
}

Adakah yang pernah mengalami masalah yang sama?

EDIT

Saya juga menggunakan ponsel jquery dengan skrip berikut untuk menonaktifkan peruteannya:

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

Saya membuat sebuah inti dengan aplikasi saya sammy javascript (termasuk rute).


5
2017-08-18 14:52


asal


Jawaban:


Saya pikir masalahnya adalah dengan klausa sekitar ini:

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
});

Seperti yang saya pahami, klausa sekitar dipanggil dengan callback (), yang akan terus memuat rute saat dipanggil.

Saya pikir ada masalah dengan rantai janji Anda. Jika memuat () mengembalikan janji ditolak (yang mungkin tidak, karena tidak ada localhost: 3000 di ponsel Anda), maka tak satu pun dari Anda maka fungsi () akan memuat. Dengan demikian, callback () tidak dipanggil dan aplikasi "berhenti". Saya akan menyarankan (a) menambahkan beberapa penanganan kesalahan di sana, sehingga Anda dapat melihat apa yang terjadi, dan pasti (b) menjalankan callback tidak peduli hasil dari beban (). Juga - JSON.parse (data) akan melemparkan kesalahan jika data bukan string berenkode JSON yang tepat - Anda juga ingin mencoba / menangkapnya.

Saya akan mencoba ini:

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".

Jika implementasi janji Anda tidak mendukung sirip (), cari apa yang disebut sebagai padanannya. Ini pada dasarnya adalah singkatan untuk: .then(callback).otherwise(callback)

Singkat cerita - Anda ingin memastikan bahwa callback yang dilewatkan ke sekitar akan dieksekusi tidak peduli apa, atau aplikasi Anda tidak akan terus memuat rute, yang merupakan perilaku yang tidak diharapkan.

Untuk masalah tentang tidak dapat melihat konsol, saya tidak yakin seperti apa lingkungan Anda, tetapi saya telah sukses dengan Eclipse dan ADT di masa lalu - saya dapat melihat log konsol dan kesalahan dengan baik.


1
2017-08-27 20:22