17

Emberであるルートから別のルートにパラメータを送信する「適切な」方法は何ですか? たとえば、次のように定義された 2 つのルートがあります。

this.resource('activities', { path: '/activities/:on_date' }, function() {
    this.route('new');
});

ActivitiesRouteユーザーの場合、可能なアクティビティのドロップダウンが表示されます。彼らが何かを選択すると、次のように遷移しますActivitiesNewRoute:

this.transitionToRoute('activities.new');

メソッドで使用可能な2番目のパラメーターがあることは知っていますが、transitionToRoute(route,model)それはモデルを渡すためのものであり、これを他のパラメーターの受け渡しに転用すべきではないと想定しています。この場合、ドロップダウンの選択肢はActionモデル ID の選択であり、ActivitiesNew のモデルはActivity.

うまくいくかもしれない方法についての私の3つの推測は次のとおりです。

1) ルーターパラメータにする

ActivitiesNewルートの一部として「パラメーター」を含めるように変更できると思いました。

this.route('new', { path: '/new/:my_parameter' });

URL パスの一部になりたいと本当に思っているかどうかはわかりませんが、これが一般的な規則である場合は、それを受け入れます。

2) ハンドルを取得し、移行後

transitionToRoute 呼び出しの直後に、新しいコントローラー クラスのプロパティを設定できます。コントローラーがまだセットアップされるかどうかはわかりませんが、次のようなものを想像しています:

this.transitionToRoute('activities.new');
this.get('target').controllerFor('activities.new').set('my_parameter', myValue);

3) モデルパラメータを使用

this.transitionToRoute('activities.new',myValue);

これは大きなノーノーだと思います。これが機能するかどうかを知るためにEmberコードを調べていませんが、慣習に反しているように見えるので、これは私の「悪いオプション」です。

4

5 に答える 5

6

APIを使用できneedsます (詳細については、こちらを参照してください)。

App.ActivitiesNewController = Ember.ObjectController.extend({
  needs: ['activities']

  // Bind the property you need
  actionTemplateBinding: 'controllers.activities.actionTemplate'
});

したがって、実際に必要なのは、コントローラー間でパラメーターを渡すことです。これはまさにそのneeds目的です。さらに、プロパティをバインドすると、呼び出されることneedsに依存するのではなく、常に同期setupControllerされます。

于 2013-10-01T06:28:21.707 に答える