10

新しいEmberルーターのインスタンスにどのようにアクセスしますか?APIドキュメントが古いルーターを参照しているか、正しくないようです:http: //emberjs.com/api/classes/Ember.Router.html

4

3 に答える 3

35

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ミートアップの新しいルーターについて、ライトニングトークをまとめました。スライドはこちらです。心配をやめてルーターを愛する方法を学びました。

于 2013-01-05T06:11:42.260 に答える
1

私はこれが至る所で機能すると信じています:

App.Router.router.transitionTo('home')

ビューで使用します。ここにコードの臭いが少しあることは承知しています。ただし、動作します。

于 2013-04-29T19:17:51.287 に答える
1

あなたはこれを試すことができます:

App.__container__.lookup('router:main').transitionTo('name_of_your_route');
于 2013-08-22T16:40:07.730 に答える