Javascript Sammyjs路由不使用Phonegap

Javascript Sammyjs路由不使用Phonegap,javascript,cordova,sammy.js,Javascript,Cordova,Sammy.js,我已经用SammyJs构建了一个应用程序。它目前在浏览器中运行良好。然而,当我使用PhoneGap将其打包到Android时,这些路由就不再有效了 我找到了。但是,给出的解决方案不起作用: (function($) { var app = $.sammy('[role=main]', function() { this.disable_push_state = true; ... }); } 有没有人经历过同样的问题 编辑 我还使用jquery mob

我已经用SammyJs构建了一个应用程序。它目前在浏览器中运行良好。然而,当我使用PhoneGap将其打包到Android时,这些路由就不再有效了

我找到了。但是,给出的解决方案不起作用:

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

//禁用JQM路由器
$(文档).bind(“mobileinit”,函数(){
$.mobile.ajaxEnabled=false;
$.mobile.linkBindingEnabled=false;
$.mobile.hashListengEnabled=false;
$.mobile.pushStateEnabled=false;
$.mobile.changePage.defaults.changeHash=false;
});

我用我的应用程序sammy javascript(包括routes)创建了一个新的应用程序。

我认为问题在于这个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()返回一个被拒绝的承诺(可能是这样,因为您的手机上没有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(),请查找它所调用的等效项。它本质上是:
。然后(回调)。否则(回调)

长话短说-您希望确保无论发生什么情况,传递给周围的回调都将被执行,否则您的应用程序将不会继续加载路由,这就是您的意外行为


至于不能看到控制台的问题,我不确定您的环境是什么样子的,但我在Eclipse和ADT方面已经取得了成功——我可以很好地看到控制台日志和错误

你能提供你定义路由的代码吗?我更新了我的答案,并提供了一个要点。在上传到手机之前,你正在将URL从localhost更改为正确的主机名/ip,对吗<代码>url=http://localhost:3000/api.json?school=“+localStorage.school请使用phonegap更新标签,以吸引phonegap专家。我不知道SammyJs,但正如我在文档“Sammy is samll web framework”中看到的,因此您需要调用链接和类似的内容。要调用链接,您应该首先将其添加到白名单中,另外,Cordova作为概念上的本地服务器工作,但它不是本地服务器,因此当您请求文件时,您应该直接使用它的名称,而不使用“我的问题已解决”。然而,我发现JQM在PhoneGap上的速度非常慢,我不喜欢这样,我不得不与框架抗争。我可能会改变我的观点并保留Sammy…这可能不适用于您的情况,但我经常发现它的“明显”响应与悬停/点击超时有很大关系。如果它对轻敲的响应很慢,如果还没有,请检查。尝试调整$.mobile.buttonMarkup.hoverDelay函数。它故意等待几百毫秒来区分悬停/点击-如果你没有悬停元素,你可以将其关闭,让你的应用程序感觉更灵敏。比我之前的尝试更好的回答:(确保你符合你的jqm版本)我确实注意到了一个差异,特别是点击延迟。