【发布时间】:2014-05-31 11:00:48
【问题描述】:
我正在尝试编写我的第一个单页应用程序。这个想法是有 1 个包含许多 <div> 标记的 HTML 文件;其中每个<div> 代表一个网页“页面”。然后应用程序一次只显示 1 个<div>,并隐藏其他。这样,当用户浏览我的应用程序时,我实际上只是显示/隐藏不同的“页面”div,并给人一种单页应用程序的错觉。
其他要求是:
- 这是一个 HTML5 应用程序
- 每个页面 div 也必须映射其自己的可收藏 URL(
http://myapp.example.com/#fizz、http://myapp.example.com/#buzz等) - 单个页面 div 是可收藏的,应用必须使用 HTML5 历史 API
我决定使用 Crossroads 进行路由,使用 Hasher 进行历史记录。另一个主要竞争者是 AngularJS,但最后我决定不使用 AngularJS,因为它对于我在这里尝试做的事情来说太重了,而且似乎有一个更陡峭的学习曲线与之相关。
到目前为止,我的项目目录结构如下:
myapp/
index.html
myapp.js
myapp.css
signals.min.js <-- Required by both Crossroads and Hasher
crossroads.min.js
hasher.min.js
包含我的 index.html、myapp.css 和 myapp.js 文件的 JSFiddle 在这里:
这个想法是,用户可以单击“导航栏”中的链接之一(“主页”、“关于”、“联系方式”)并被带到代表该特定页面的“页面”(div)。
如您所见,默认的“页面”应该是HOME,这意味着这是您应该能够看到的唯一 div。但是所有的页面 div 都是可见的,没有一个是隐藏的。在我能够正确显示/隐藏页面 div 之前,我无法真正测试路由/历史功能。我是否以某种方式错误地配置了 Crossroads/Hasher?
【问题讨论】:
-
多页抽象是你的事。你必须实施它。 Crossroads 只是提供路由功能。默认情况下,它不会执行您所要求的操作。您应该尝试制作更多 HTML5/CSS3 页面。 CSS 可以处理可见性。它也很基本。如果您在这里搜索过,您会找到很多关于如何操作的答案。
-
感谢@user568109 (+1):有几件事:(1) 我的理解是 Crossroads 处理路由,而 Hasher 处理历史。如果这就是他们所做的一切,那么有人只需要调整我的代码以展示如何将路由和历史记录合并到我的应用程序中,我将奖励他们全部赏金。 (2) 我做了研究。实际上,如果您查看我的 JS,您将能够找到与 Crossroads 文档中几乎完全相同的函数/代码。你说有很多关于如何做我所问的答案;你能给我提供其中 2 个或 3 个的链接吗?再次感谢。
-
如果您的实际单页将包含多页。这些页面将如何加载?加载主页时会全部加载(来自相同的 url)。还是这些是其他网址的远程页面/链接?
-
再次感谢@user568109 (+1)。这个想法是用一个 HTML 文件/请求来拉下一切。然后只需显示/隐藏用户应该查看的正确“页面”(
<div>)。我需要每个“页面”对应于一个可添加书签的 URL(即“Fizz”页面,它可能对应于<div id="fizz">元素,并且可能与http://myapp.example.com/#fizzURL 等相关联)。最重要的是,当用户导航到多个“页面”时,每个可收藏的 URL 都需要被推送到 HTML5 历史机制,以便前进/后退按钮起作用。 -
如果满足所有其他条件,是否需要 Crossroads 和 Hasher 才能获得全部赏金?
标签: javascript html routing single-page-application crossroadsjs