2012-08-03 83 views
0

http://jsfiddle.net/pauldechov/u4naE/如何在路由器中指定動作處理程序?

App.Router = Em.Router.extend({ 
enableLogging: true, 

root: Em.Route.extend({ 

    index: Em.Route.extend({ 
     route: '/', 
     connectOutlets: function(router) { 
      router.get('applicationController').connectOutlet('application'); 
     } 
    }), 

    // why does this work? 
    goHome: Em.Route.transitionTo('home'), 

    // ...but not this? Am I missing something? 
    goHome2: function(router, context) { 
     router.transitionTo('home', context); 
    }, 
    home: Em.Route.extend({ 
     route: 'home' 
    }) 
}) 
}); 

我得到一個錯誤說: 「您必須在當前狀態‘root.index’鏈接到它的事件指定一個目標狀態‘goHome2’。」

如何在這裏定義一個處理程序,以便我可以返回false並停止傳播,例如?我是否應該在視圖中這樣做,以及如何做到這一點?

謝謝。

+0

對不起,我可以給你一個提示。當你在模板中刪除'href = true'時,這似乎工作......但我還沒有明白這是什麼意思:( – 2012-08-03 23:57:18

回答

1

好吧,我想我已經找到它了。當使用href =「true」時,你必須指定你的函數goHome2是一個eventTransition。看到http://jsfiddle.net/Sly7/u4naE/2/

+0

謝謝!順便說一下,即使你是在聲明所有的eventTransitions不要使用'href =「true」'?僅用於函數或者'Em.Route.transitionTo(...)' – dechov 2012-08-04 00:53:23

+0

這是個好問題。在工作中,我們不使用它,所以我們不要定義eventTransitions,而且我認爲保持eventTransitions哈希與代碼同步是一個非常艱鉅的工作(在我們的應用程序中,我認爲我們有上百次轉換......)或許通過發佈有關ember js github的問題或者搜索因爲這將幫助你決定做什麼 – 2012-08-04 01:00:11

+1

看起來像使用Em.Route.transition填充eventTransitions哈希:https://github.com/emberjs/ember.js/pull/930 – 2012-08-04 01:07:39

相關問題