我正在尝试使用 Backbone 和路由器将应用程序转换为 ajax 应用程序,但是它目前使用几种不同的方法(帮助程序)来生成链接。不幸的是,这意味着手动更改每个链接以使用主题标签是不可能的。
确保每个链接、表单发布、重定向等都被解析为可由 Backbone 的路由器捕获的主题标签 URL 的最佳方法是什么?或者,更好的是,路由器是否有可能接受来自请求的“真实 URL”?示例:对/app/mail/inbox.php 的请求被路由器中的规则捕获,并在触发适当的方法来处理请求后变成 #/mail/inbox。
最佳答案
我不认为 Backbone.Router
应该处理表单帖子。它应该为您的应用程序提供 View 状态 — 书签友好且可刷新的 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] 另见 this presentation about Backbone
关于backbone.js - 使用 Backbone.js 将现有的 Web 应用程序转换为使用主题标签 URI,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6694731/