新しいEmberルーターのインスタンスにどのようにアクセスしますか?APIドキュメントが古いルーターを参照しているか、正しくないようです:http: //emberjs.com/api/classes/Ember.Router.html
3 に答える
RouterV2は、グローバル定数を介して簡単にアクセスできないため、「間違った」方法で物事を行うことがより困難になります。覚えておくべき主なことは、グローバル変数を介してルーター(または他のもの)にアクセスしてはならないということです。そうすることは一般的に悪い習慣であり、テストするのが非常に難しいコードにつながります。残念ながら、古いルーターでは、次のようなことを行うのは非常に簡単App.router.transitionTo('whatever')
でした。その例はいたるところにありますが、それは良い考えではありません。
emberは、グローバル参照を使用する代わりに、ルーターへのローカル参照を必要な場所に挿入します。
- モデルから:アクセスできません。モデルはルーターと通信してはいけません
- コントローラーから:
router = this.get('target')
- ビューから:ビューはルーターにアクセスするべきではありませんが、コントローラーに送信するイベントはバブルアップします。例えば:
this.get('controller').send('search', term)
- テンプレートから:
{{action}}
または{{#linkTo}}
ヘルパーを使用して、(コントローラーを介して)イベントを送信するか、別のURLに移行します。
詳細については、このコミットに関するメモを参照してください: https ://github.com/emberjs/ember.js/commit/5becdc4467573f80a5c5dbb51d97c6b9239714a8
** アップデート **
1月のEmberNYCミートアップの新しいルーターについて、ライトニングトークをまとめました。スライドはこちらです。心配をやめてルーターを愛する方法を学びました。
私はこれが至る所で機能すると信じています:
App.Router.router.transitionTo('home')
ビューで使用します。ここにコードの臭いが少しあることは承知しています。ただし、動作します。
あなたはこれを試すことができます:
App.__container__.lookup('router:main').transitionTo('name_of_your_route');