2015-06-10 3 views
1

Мне нужно выполнить вызов API, когда пользователь нажимает кнопку «Назад» в браузере, а затем перенаправляется на маршрут, основанный на обратном ответе. Я читал о API определения местоположения, но не могу понять, как различать изменения URL-адресов из-за кликов по изменению ссылок и URL-адресов из-за кнопки браузера. Любое предложение действительно оценено.Ember.js выполняет действие при нажатии кнопки «Назад назад»

ответ

1

Я нашел решение и поделиться им здесь. Я не знаю, лучшее ли это решение, но оно работает для меня.

Я создал массив со списком маршрутов в том порядке, в котором они могут быть перемещены, предположим, что это ['route1', 'route2', 'route3', 'route4']. В моей ситуации маршрут можно пропустить, но порядок должен поддерживаться. Например путь навигации может быть

Route1 -> route2 -> route4

но не

Route1 -> route4 ---> route3

Переход от route4 к route3 может быть выполняется только с помощью обратного действия (кнопка браузера или кнопка на странице).

willTransition Действие для каждого из этого маршрута, я сравниваю индекс целевого маршрута в массиве с индексом текущего маршрута. Если первое значение меньше, чем второй, пользователь навигации обратно, а затем я могу выполнить API вызова:

// environment.js 
ENV.APP.routeList = ['route1', 'route2', 'route3', 'route4'] 

// route 
App.Route1 = Ember.Route.extend({ 
    ... 

    actions: { 
     willTransition: function(transition) { 
      var routeList = ENV.APP.routeList; 
      if (routeList.indexOf(transition.targetName) < routeList.indexOf(this.get("routeName"))) { 
       console.log("GO BACK"); 
       this.send("back"); 
      } 
     } 
    } 
}); 
0

Я бы выбрал willTransition. Так как ваш вопрос не дает нам много работать, вот некоторые псевдо-код:

маршруты/some_route.js

export default Ember.Route.extend({ 
    actions: { 
    willTransition: function(transition) { 
     var route = this; 
     backEndAjaxCall().then(function(response) { 
     if (response.itsAGoodIdeaToTransition) { 
      transition.abort(); 
      route.transitionTo("some_other_route"); 
     } else { 
      // Bubble the `willTransition` action so that 
      // parent routes can decide whether or not to abort. 
      return true; 
     } 
     }); 
    } 
    } 
}); 
+0

Я пытался что-то подобное, но willTransition обжигают каждый раз, когда текущий маршрут си возбужденное. Как я могу узнать, выполнено ли это действие, потому что пользователь нажал кнопку «Назад» браузера или потому, что он нажал другие ссылки на странице? – GUL

+0

Ах да, хороший вопрос. Кажется, что нет конкретного способа узнать, как пользователь перешел на маршрут, хотя я нашел это: https://github.com/emberjs/ember.js/issues/3087. Используйте свою собственную опасность. –

+0

Я просто попытался проверить значения в параметре «переход», но кажется, что нет никаких различий в значениях между обычным нажатием кнопки «переход» и «назад». Я думаю, что мне нужно вести список посещенных страниц и порядок, в котором они должны быть посещены, и проверить, если пользователь идет вперед или назад – GUL

Смежные вопросы