Backbone.js解析路由器中的可选页面查询字符串

时间:2013-10-05 15:58:03

标签: javascript django backbone.js backbone-routing

我正在慢慢地将我的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处理路由的路由模式?

1 个答案:

答案 0 :(得分:0)

使用的路由模式是正确的。发现问题与html页面中定义锚点href的方式有关。

锚元素的定义如下:

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

href值为?page=2,以开头。但事件监听器期望仅在href以 / 开头的地方捕获锚点击事件。因此,它未能 preventDefault!