2013-11-01 59 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