0

我正在慢慢地将我的 django 实现转移到backbonejs 渲染。当backbonejs 渲染无法处理时,Django 被用作后备。这是由bonesjs 路由器使用以下代码处理的。

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
  }
});

我希望 urlset/?page=2由 Backbone.js 触发。但上述路线不匹配。什么路由模式可以让页面参数成为可选参数,同时让backbonejs处理路由?

4

1 回答 1

0

使用的路由模式是正确的。发现问题出在html页面中定义锚href的方式上。

锚元素定义如下:

<a class="page" href="?page=2" data-original-title="" title="">2</a>

href 值是以??page=2开头的. 但是事件侦听器希望仅在 href 以/开头的地方捕获锚的点击事件。因此它未能防止默认!

于 2013-10-07T02:14:37.093 回答