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

Backbone.js parse optional page query string in router

本文关键字:查询 字符串 js 路由器 骨干      更新时间:2023-09-26

我正在慢慢地将我的django实现移动到backbonejs渲染。Django 被用作 backbonejs 渲染无法处理时的后备。这是由使用以下代码的 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 处理路由?

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

锚元素定义如下:

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

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