使用Backbone.js将现有Web应用程序转换为使用hashtag URI

时间:2011-07-14 14:21:23

标签: backbone.js

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

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

1 个答案:

答案 0 :(得分:6)

  

确保每个链接,表单发布,重定向等的最佳方法被解析为可以被Backbone的路由器捕获的主题标签URL?

我不认为Backbone.Router应该处理,比如说,形成帖子。它应该为您的应用程序提供查看状态 - 书签友好且可刷新的URL [1]。

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

关于普通旧链接,最近向Backbone添加了History.pushState()支持。这意味着您可以将路由定义为/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);

如果路由器的navigate()方法可用,则history.pushState()方法将执行hashchange,并返回旧的true。而{{1}}作为第二个参数意味着它将触发相应的处理程序操作。

[1]另见this presentation about Backbone