0

アプリケーションを 1.0.0-pre.4 にアップグレードしたばかりで、ルーターを新しいルーター API に変更中ですが、コントローラー間のバインディングを作成できなくなっているようです。

したがって、メインの ApplicationController には、次のものがあります。

App.ApplicationController = Em.ArrayController.extend({
    user: App.User.create()
});

そして、ルーター API の v1 では、次のようになりました。

App.IndexController = Ember.ArrayController.extend({
    userBinding: 'App.router.applicationController.user',
});

ただし、ルーター API の v1 への変更に伴い、App.router は定義されなくなりました。userBinding を 'App.ApplicationController.user' に設定しても機能しません。まるで applicationController が機能していないかのようです。

私が達成しようとしているのは、ユーザー モデルのインスタンスを作成し、それを多数のルート/ビューで共有することです。

どんなアイデアでも大歓迎です。

4

2 に答える 2

1

残念ながら、Emberは、ユーザーが不正なコードを実装するのを防ぐために、シングルトンコントローラーのすべてのインスタンスを非表示にしました。コントローラーを明示的に参照するのではなく、すべてを分離し、依存性注入を使用してコントローラーにを渡す必要があります。

以前のリリースのEmberでは、connectControllersコントローラーを相互に接続できましたが、今回の最新リリースのEmberでは、ルーターの「set」を使用して他のコントローラーを渡すだけです。

あなたの例では、IndexControllerとがあり、内からUserControllerにアクセスするには、次のようなことを行う必要があります。userControllerindexController

(これはすべてEmberのルーターで行われることに注意してください。Emberのルーターについて詳しくは、http://emberjs.com/guides/routing/setting-up-a-controller/を参照してください) 。

App.UserRoute = Ember.Route.extend({
  setupController: function(controller) {
    this.controllerFor('index').set('userController', controller);
  }
});

indexControllerこれで、から情報を読み取ることができるようになりますuserController。テンプレートでは、これは次のようになります。

{{controller.userController.name}}
于 2013-01-28T16:41:49.320 に答える
1

ObjectControllers で「needs」を使用する別の回避策があります。使い方の参考記事はこちら。 http://eviltrout.com/2013/02/04/ember-pre-1-upgrade-notes.html

于 2013-02-06T04:10:45.307 に答える