我正在慢慢地将我的django实现移动到backbonejs渲染。当backbonejs渲染无法处理时,Django被用作后备。这是由backbonejs路由器使用以下代码完成的。
Backbone.history.start({
pushState: true,
silent: true
});
$(document).on("click", "a[href^='/']", function(event) {
if (!event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) {
var url = $(event.currentTarget).attr("href").replace(/^\//, "");
var matched = _.any(Backbone.history.handlers, function(handler) {
if (handler.route.test(url)) {
return true;
}
});
if (matched) {
event.preventDefault();
application.router.navigate(url, { trigger: true });
}
}
});
基本上,如果骨干路由器无法处理,它将回退到django模板渲染。但我现在无法捕获分页的页面。我已经定义了以下路由。
module.exports = Backbone.Router.extend({
routes: {
'set/(?page=:page)': 'list_set'
},
list_set: function(page) {
// Do listing of set
}
});
我希望使用set/?page=2
的网址由Backbone.js触发。但上述路线无法匹配。什么是使页面参数可选并且还使backbonejs处理路由的路由模式?
答案 0 :(得分:0)
使用的路由模式是正确的。发现问题与html页面中定义锚点href的方式有关。
锚元素的定义如下:
<a class="page" href="?page=2" data-original-title="" title="">2</a>
href值为?page=2
,以?开头。但事件监听器期望仅在href以 / 开头的地方捕获锚点击事件。因此,它未能 preventDefault!