Backbone.js和pushState

Mar*_*cus 37 javascript backbone.js

如果我在骨干路由器中启用pushState,是否需要在所有链路上使用return false或者骨干是否自动处理?那里有任何样本,包括html部分和脚本部分.

ggo*_*zad 67

这是Tim Branyen在他的样板中使用的模式:

initializeRouter: function () {
  Backbone.history.start({ pushState: true });
  $(document).on('click', 'a:not([data-bypass])', function (evt) {

    var href = $(this).attr('href');
    var protocol = this.protocol + '//';

    if (href.slice(protocol.length) !== protocol) {
      evt.preventDefault();
      app.router.navigate(href, true);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

使用它,而不是单独对链接执行preventDefault,您可以让路由器默认处理它们,并通过拥有data-bypass属性来实现异常.根据我的经验,它作为一种模式很有效.我不知道周围有什么好的例子,但是自己尝试一下不应该太难.Backbone的美丽在于它的简洁;)

  • 只是抬头 - 我注意到IE7在某些我期待相对URL的情况下返回了绝对URL.要处理这种情况,您需要在调用导航之前将`href`的值规范化为相对路径. (4认同)
  • 不应该`href.slice(protocol.length)`实际上是`href.slice(0,protocol.length)`? (4认同)
  • 我找不到上面关于在样板项目中任何地方进行锚点处理的代码片段.该项目是否已被清空? (2认同)

myn*_*hno 9

 $(document.body).on('click', 'a', function(e){
   e.preventDefault();
   Backbone.history.navigate(e.currentTarget.pathname, {trigger: true});
 });
Run Code Online (Sandbox Code Playgroud)