2013-11-01 3 views
5

Допустим, у меня есть ApplicationRoute с действием goBack (как вы можете видеть в комментариях, мне нужно обрабатывать GoBack самостоятельно из-за ошибки в различных мобильных браузерах):ember.js: Вызов действия ApplicationRoute от вложенного маршрута

Mobile.ApplicationRoute = Em.Route.extend 
    actions: 
     goBack: -> 
      # TODO: Remove when iOS 7 fixed their history 
      # If there's no route to go back, go to front 
      # TODO: Remove when Microsoft fixed their 
      # back button in offline mode 
      if not (Nn.MobileHelper.isiPhone() or Nn.MobileHelper.isIeMobile()) and @get("router.recentRoute")? 
       return window.history.back() 

      @get("controller").set("isHitBackButton", true) 

      @transitionTo("front").then => @get("controller").set("isHitBackButton", false) 

Как я могу вызвать это действие с другого маршрута? Обратите внимание, что поскольку мне нужно позвонить @transitionTo, этот фрагмент кода должен быть внутри маршрута.

ответ

5

действия по умолчанию применимы к маршруту приложения! Просто используйте {{action 'goBack'}} в своем шаблоне или из кода (минус компоненты) звоните this.send('goBack'). Из компонентов вам нужно связать вызов события немного иначе и использовать this.sendAction('internalActionName').

http://emberjs.jsbin.com/ulIhUze/1/edit

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