2012-10-13 2 views
2

У меня есть sammy.js, работающий в приложении knockout.js. В настоящее время я пытаюсь перенаправить маршруты, в которых отсутствует конечная косая черта (например, /#/stop/1/100032) Я бы хотел перенаправить все такие страницы, у которых отсутствует конечная косая черта, на страницу с завершающей косой чертой.Как перенаправить с страниц без привязки косых черт на страницы с завершающими косыми чертами

Чтобы усложнить ситуацию, я также хотел бы иметь страницу с ошибкой в ​​случае, если такого маршрута нет.

function RoutesViewModel() { 
    var self = this; 

    self.router = Sammy(function() { 
     this.get('/#/stop/:agency_id/:stop_id/', function() { 
      app.page.state('bus'); 
      app.stop.setCurrentById(this.params['agency_id'], this.params['stop_id']); 
      mixpanel.track('stop page load', { 
       'route': '/#/stop/' + this.params['agency_id'] + '/' + this.params['stop_id'] + '/', 
      }); 
     }); 
     this.get('/(.*[^\/])', function() { 
      this.redirect('/',this.params['splat'],'/'); 
     }); 
    }); 

    self.router.error = function (message, error) { 
     app.page.header("Unable to find your page"); 
     app.page.message("The page you've requested could not be found.<br /><a href=\"/\">Click here</a> to return to the main page."); 
    } 

    self.run = function() { 
     self.router.run(); 
    } 
} 

Выше приведен список маршрутов, которые у меня есть до сих пор. К сожалению, когда я перехожу к примеру url выше, страница загружает ошибку, вместо правильного /#/stop/1/100032/.

Любая помощь была бы принята с благодарностью.

+0

Вы когда-нибудь находили решение? – Chad

ответ

0

Я знаю, что это старый вопрос, но я столкнулся с этой проблемой.

Согласно http://sammyjs.org/docs/routes маршруты являются регулярными выражениями. Так что это работает для меня:

this.get('#/foo/:id/?', function() { 
0

У меня была такая же проблема, и решил исправить это с уловом-все в конце моего Сэмми установки. Мое решение удаляет конечную косую черту, если она есть, но вы можете легко сделать обратное, вместо этого добавьте косую черту:

Sammy(function() { 
    this.get('#', function() { 
     // ... 
    }); 
    this.notFound = function (method, path) { 
     if (path[path.length - 1] === '/') { 
      // remove trailing slash 
      window.location = path.substring(0, path.length - 1); 
     } else { 
      // redirect to not found 
     } 
    } 
});