- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我用 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/
我想确定 sammyJS 路由是否是第一次执行(如浏览器刷新)或者是否在页面初始加载后访问该路由。 我的用例是,在某些情况下,当执行路由时,新内容不可见,因为用户已向下滚动页面。我想在用户已经加载页面
我正在使用 sammyJS 和 node.js 制作一个应用程序。问题是:根据文档,我可以在路由开头添加或不添加 # (/#/myroute/)。我所有的应用程序都是在没有尖锐的情况下构建的,现在我想
只是想知道是否有在 sammy js 路由中将参数指定为可选的。 我见过你可以用的地方 route/:foo/?:bar 这会让 sammy 认为 bar 是可选的。但是,如果您在没有提供 bar 的
我在将 Sammy 与 Angular 结合使用时遇到问题。 我有这个应用程序模块 var appModule = angular.module('myApp', []).run(function (
我用 SammyJs 构建了一个应用程序。它目前在浏览器中完美运行。但是,当我使用 PhoneGap 将其打包到 Android 时,路由不再有效。 我找到了 this SO question .但是
我在单页应用程序中使用 sammy.js 插件。该插件无法正常工作,每当用户尝试在页面中导航时,它都会在控制台上显示以下错误: [Tue Dec 04 2012 17:48:13 GMT+0530 (
我将 KnockoutJS 与 SammyJS 一起用于客户端模板和 Django 框架在我的应用程序的顶部栏中,有一个用于用户注销的下拉菜单。这是它的代码 -
我开始使用 KnockoutJS (2.2.1)、SammyJS (0.7.4) 和 PagerJS 的组合(最新来自 github 和 jquery hashchange)创建一个单页应用程序,我遇
有没有人有一个例子可以让 SammyJS json 商店演示的产品详细信息显示在像 FancyBox 这样的模态插件中? ? 这是来自 json 存储的代码块 - 我需要做什么才能在模型中呈现它 Fa
我不清楚我应该如何使用 sammyjs 从外部 API 加载 json。 这段代码效果很好: this.get('#/contact', function(context) { this
我有点麻烦让 sammyjs 与 requirejs 一起玩。调用 $.sammy 失败,错误提示 sammy 未在 jQuery 命名空间中定义。 这是我的需求配置 require.config
我定义了以下服务器端 URL 映射: /main/item1 /main/item2 我添加了 SammyJS 路由支持,以便我能够执行以下操作: /main/item1#/ /* m
我只是想知道是否有人使用 requireJS 设置了 SammyJS 以根据提供的哈希地址路由模块的创建? 这可能吗?有什么建议吗? 谢谢 最佳答案 在BoilerplateJS我们使用 crossr
我刚刚开始使用 KnockoutJS,我正在将它与 PagerJS、SammyJS 和 BootStrap 结合使用来构建单页应用程序,但我现在有点不知所措。 令我吃惊的是,我应该如何以一种简单且可重
我是一名优秀的程序员,十分优秀!