使用Backbone.js将现有web应用转换为使用hashtag URI

使用Backbone.js将现有web应用转换为使用hashtag URI,backbone.js,Backbone.js,我试图使用主干网和它的路由器将一个应用程序转换成ajax应用程序,但是它目前使用几种不同的方法(助手)来生成链接。不幸的是,这意味着手动更改每个链接以使用标签是不可能的 确保每个链接、表单发布、重定向等都被解析为可被主干路由器捕获的标签URL的最佳方法是什么?或者,更好的是,路由器是否可以接受来自请求的“真实URL”?示例:对/app/mail/inbox.php的请求被路由器中的规则捕获,并在触发相应的方法来处理该请求后转换为#/mail/inbox 确保每个链接、表单发布、重定向等都被解析为

我试图使用主干网和它的路由器将一个应用程序转换成ajax应用程序,但是它目前使用几种不同的方法(助手)来生成链接。不幸的是,这意味着手动更改每个链接以使用标签是不可能的

确保每个链接、表单发布、重定向等都被解析为可被主干路由器捕获的标签URL的最佳方法是什么?或者,更好的是,路由器是否可以接受来自请求的“真实URL”?示例:对/app/mail/inbox.php的请求被路由器中的规则捕获,并在触发相应的方法来处理该请求后转换为#/mail/inbox

确保每个链接、表单发布、重定向等都被解析为可被主干路由器捕获的标签URL的最佳方法是什么

我不认为主干路由器应该处理,比如说,表单帖子。它应该为您的应用程序视图状态提供书签友好且可刷新的URL[1]

如果您想“ajaxify”表单,那么您可能应该为表单的提交事件添加一个处理程序,并在那里执行类似于
$.ajax()
的操作,以防止默认操作

对于普通的旧链路,最近已向主干网添加了支持。这意味着您可以将路由定义为
/app/*
,而不需要替换旧的
href
属性。但是,您仍然需要捕获链接单击事件以防止默认操作

例如:

var handle_link_click = function(e) {
    path = $(e.target).attr('href');
    app.main_router.navigate(path, true); // This.
    e.preventDefault();
};
$('a:internal').click(handle_link_click);
路由器的方法将执行
history.pushState()
(如果可用),返回到旧的
hashchange
。而
true
作为第二个参数意味着它将触发相应的处理程序操作


[1] 另请参见

,您是否希望捕获锚定
onclick
,转换URL,并改为发出window.location.hash?如果您的客户端映射程序足够智能,那么这将起作用。这将完全使你的网站SEO盲目,但它会工作。不只是锚点击,也表单提交,重定向,或只是一个正常的GET请求。另外,不担心搜索引擎优化。用户必须登录到网站的这一部分。这正是我想要的信息。我有点担心同时支持pushState和hashtag URL,因为我需要支持的IE版本并不完全支持pushState。即使有这个缺点,我仍然认为这是最可行的选择。谢谢我不确定你所说的缺点是什么:也许我在回答中对此有点不清楚,但据我所知,在调用相应的处理程序函数之前,
router.navigate()
如果
history.pushState(/app/*)
不可用,是否会触发hashchange事件(
#/app/*
)。所以你得到了更老的浏览器支持:IE6将只使用hashtags,处理函数仍然会被调用。明白了,这是我的误解。谢谢你的澄清。