2012-06-22 13 views
6

もっと深く掘り下げていくにつれてこれが明確になると確信していますが、現時点ではこれをどうやって行うのかは分かりません。Ember.jsルーティング:どのようにしてすぐにレンダリングするデフォルトルートを設定しますか?

私はthis helpful SO article about routingの情報に従っていましたが、この例では欠けている重要な部分があります。つまり、「ホーム」ビューを「ホーム」リンクをクリックすることなくすぐにレンダリングするにはどうすればいいですか?

私はこれを理解しようとするためにドキュメントを掘り下げ始めましたが、一方で、後世のために答えたことは有益な質問のようです。

私は上記の質問hereから作業jsfiddle例で遊んと、この他の例と比較して、私はseems to have the default routing working

はこれまでのところ、それはまだ謎だということが分かってきました。

現在のコード

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

    root: Em.State.extend({ 
    // EVENTS 
    goHome: Ember.State.transitionTo('home'), 
    viewProfile: Ember.State.transitionTo('profile'), 

    // STATES 
    index: Em.State.extend({ 
     route: "/", 
     redirectsTo: 'home' 
    }), 

    home: Em.State.extend({ 
     route: '/home', 
     connectOutlets: function(router, context) { 
      var appController = router.get('applicationController'); 
      appController.connectOutlet('home'); 
     } 
    }), 

    // STATES 
    profile: Em.State.extend({ 
     route: '/profile', 
      connectOutlets: function(router, context) { 
       var appController = router.get('applicationController'); 
       appController.connectOutlet('profile'); 
      } 
     }), 
     doOne: function() { 
      alert("eins"); 
     } 
    }) 
}); 

UPDATE:ソリューション

それはそれはむしろEm.State.extendを使用していたので、私が働いていた例が働いていなかった理由があったことが判明Em.Route.extendより。興味深いのは、私が一歩一歩進んでいくうちに、私が一歩一歩進んでいくうちに、私はそれらをすべて変更するまでその例が機能しないということです。ここで

は作業exampleです:

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

    root: Em.Route.extend({ 
    // EVENTS 
    goHome: Ember.State.transitionTo('home'), 
    viewProfile: Ember.State.transitionTo('profile'), 

    // STATES 
    index: Em.Route.extend({ 
     route: "/", 
     redirectsTo: 'home' 
    }), 

    home: Em.Route.extend({ 
     route: '/home', 
     connectOutlets: function(router, context) { 
      var appController = router.get('applicationController'); 
      appController.connectOutlet({name: 'home'}); 
     } 
    }), 

    // STATES 
    profile: Em.Route.extend({ 
     route: '/profile', 
      connectOutlets: function(router, context) { 
       var appController = router.get('applicationController'); 
       appController.connectOutlet('profile'); 
      } 
     }), 
     doOne: function() { 
      alert("eins"); 
     } 
    }) 
}); 

答えて

3

Uがホームルートにインデックスからリダイレクトを行うことができます。実例: http://jsfiddle.net/FRfBt/

+1

感謝を。上記の例との違いが何であるかを理解するまでにはしばらく時間がかかりましたが、最終的にはそれを理解しました。 Em.Route.extendではなくEm.State.extendを使用していたので、私が与えた例はうまくいきませんでした。 – radixhound

9

これは今やややこしいことです。私はそれを行うためのこの方法で成功だった:エンバーCLIで

App = Ember.Application.create(); 

App.Router.map(function() { 
    // 'index' route is default 
    this.resource('dashboard'); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     // this redirects/to /dashboard 
     this.transitionTo('dashboard'); 
    } 
}); 

App.DashboardRoute = Ember.Route.extend({ 
}); 
6

を、あなたはルートディレクトリのルートにindex.jsにリダイレクトを置くことができます取り組ん例えば

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    redirect: function() { 
    this.transitionTo('dashboard'); 
    } 
}); 
関連する問題