- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经设置了一个 super 简单的 Backbone 应用程序,只有一个路由器和两个 View ,以尝试确定处理没有 hashbang 的路由的正确方法。
var Router = Backbone.Router.extend({
routes: {
'': 'index',
'episodes': 'episodes'
},
index: function () {
var view = new IndexView();
view.render();
},
episodes: function () {
var view = new EpisodesView();
view.render();
}
});
var IndexView = Backbone.View.extend({
el: $('#primary'),
render: function () {
console.log('index view');
}
});
var EpisodesView = Backbone.View.extend({
el: $('#primary'),
render: function () {
console.log('episodes view');
}
});
var router = new Router;
Backbone.history.start({pushState: true});
我意识到 history
对象允许在页面之间向前和向后导航,这很棒。然而,它的实际实现方式对我来说似乎有点困惑。
例如,我创建了一个简单的 MAMP 服务器来提供 index.html
文件和 JS 文件。导航到 http://backbone:8888/
,控制台会像我告诉的那样记录 index view
。但是,导航到 http://backbone:8888/episodes
(通过在地址栏中输入)会返回 404。但是,如果我导航到 http://backbone:8888/#episodes
,URL 重定向到 http://backbone:8888/episodes
(没有 hashbang),我将 episodes View
记录到控制台,这显然意味着它正在点击 EpisodesView
View 。
从这里,我可以在索引 View 和剧集 View 之间来回切换。 (后击/,前击/剧集)。一切都很好,直到我再次在 /episodes
上点击刷新。 404...
所以我的问题是:如何设置 Backbone 来处理 URL,而不依赖 hashbangs?我在该主题上找到的所有内容都表明“哦,只是 pushState
!”。嗯,我正在使用 pushState
,就像我上面描述的那样,您无法直接访问像 /episodes
这样的 URL,而不会收到 404 错误。
最佳答案
当您使用推送状态时,页面是从后端提供的,这意味着您必须在后端定义与前端路由相对应的相应路由。
如果后端没有找到请求的路由,那么它将发送 404 消息,因为它不知道要提供什么服务。在您的情况下,剧集 View 会在前端级别触发,但当页面刷新时,浏览器没有 DOM 来呈现 View ,因为没有提供任何服务。
默认情况下,路由 http://backbone:8888/
将提供索引文件,因为这是网络服务器的配置方式。
我不确定您使用的是什么后端技术,但是要从 http://backbone:8888/episodes
提供文件,只需确保您的后端设置了一个可以提供服务的路由器请求的路线,它应该可以工作。
关于javascript - 没有 hashbang 的 Backbone 路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27710563/
这个问题在这里已经有了答案: 8 年前关闭。 Possible Duplicate: how to use multiple arguments with a shebang (i.e. #!)? 我
有谁能告诉我怎么做吗?这是我在此处用于动态加载内容的调用: jQuery(document).ready(function($) { function load(num) {
所以我一直在调查整个 SEO AJAX 恶意软件,并在这里设置了一个测试页面:My Site 我使用了来自 GitHub 的示例代码,如您所见,hashbang #! 工作正常,但请尝试访问任何将 h
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 10 个月前。 Impro
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这个问题在这里已经有了答案: AngularJS routing without the hash '#' (10 个回答) angularjs 1.6.0 (latest now) routes n
除了让 Google 可以抓取 AJAX 内容之外,shebangs/hashbangs 是否还有其他用途?还是它? 最佳答案 在 Ajax 发明之前很久就已经存在 URL 中使用的散列。 它最初是作
我正在为我的单页应用程序使用 Sammy.js。我想创建类似于 SO 的功能(当您输入问题并尝试离开页面时,它会询问您是否确定)。 如果它不是单页应用,我会做类似的事情: $(window).bind
我有一个单页应用程序,可以打开多个选项卡,每个选项卡执行不同的操作。然而,如果用户点击刷新或返回,他们就会失去他们正在处理的所有内容。有没有办法(可能结合使用 hash-bangs 和 cookie)
我现在的位置:我已经阅读了 Google 关于 AJAX 抓取的文档,并且在这个网站和其他网站上进行了一些搜索,但我很困惑,因为它似乎所有问题都解决了同一个问题:AJAX crawing with h
除了谷歌提出的 hashbang 方法之外,谁能给我一个不使用 hijax(渐进式增强)方法的充分理由?据我所知,hijax 方法仍然是更好的方法: 它适用于非 javascript 浏览器 所有搜索
我正在创建一个 React 应用程序,并且有两个 URL,如下所示: /home /运动员 我想在这两个 URL 中的 hashbang 之后添加一个 q 参数。因此,这个 URL 基本上会在我所在的
最新版本的 Angular/Angular-Route 1.6.1 默认使用 hashbang 吗?就拿这段代码来说,我必须使用#!当链接到部分时,因为 #/或 #/partial2 不起作用。我认为
我读了here shebang (#!) 的想法太谷歌了 knows that an alternative conventional URL exists providing the same pa
为什么 Angular 有时在 URL 中使用散列,而其他时候使用散列?我已经开始从头开始编写两个 Angular 应用程序。两者都没有使用 HTML5 模式。两者都有相同的默认路由。但是,默认 UR
我正在构建一个网络应用程序,在后台使用 express.js,在前端使用 backbone.js。 我希望整个内部应用程序在客户端处理(主干请求数据并呈现它,服务器不直接返回任何 html)。 为了让
我希望将我的站点移动到完全异步文档加载中,但我不想使用请求处理的 #! 方法,因为 1) 我不想断开链接,和 2) 我想要一种更灵活的方式来处理站点获取的 URI。 我已经能够为我的网站构建一个轻型
我正在开展一个 Cordova 项目。我有一些带有监听器的链接,href 设置为“#”。 现在,在我的所有函数中,我提供事件并调用 PreventDefault()。 由于某种原因(在浏览器中访问应用
根据 Goolge's docs , 万能的谷歌蜘蛛会查看这个 url: www.example.com/ajax.html#!key=value 然后转到这个 url www.example.com
我开发了一个以非 ajax 页面为核心的网站,然后是一个带有 url 的分支 http://mywebsite.com/frameworks/#!ajaxpageaddress1 http://m
我是一名优秀的程序员,十分优秀!