Backbone.js and pushState

前端 未结 4 1183
温柔的废话
温柔的废话 2020-11-28 20:19

If I enable pushState in the backbone router, do I need to use return false on all links or does backbone handle this automatically? Is there any samples out there, both the

4条回答
  •  無奈伤痛
    2020-11-28 20:48

    match() or startsWith() (ES 6) also can be used for checking protocol. If you want to support absolute urls by pathname property, check the base urls by location.origin.

    function(evt) {
      var target = evt.currentTarget;
      var href = target.getAttribute('href');
    
      if (!href.match(/^https?:\/\//)) {
        Backbone.history.navigate(href, true);
        evt.preventDefault();
      }
      // or
    
      var protocol = target.protocol;
    
      if (!href.startsWith(protocol)) {
        // ...
      }
      // or
    
      // http://stackoverflow.com/a/25495161/531320
      if (!window.location.origin) {
        window.location.origin = window.location.protocol 
         + "//" + window.location.hostname
         + (window.location.port ? ':' + window.location.port: '');
      }
    
      var absolute_url = target.href;
      var base_url = location.origin;
      var pathname = target.pathname;
    
      if (absolute_url.startsWith(base_url)) {
        Backbone.history.navigate(pathname, true);
        evt.preventDefault();
      }
    }
    

提交回复
热议问题