0

「アウトレット」を使用する新しい Emberjs Router コンポーネントにアプリを移動しようとしています。

参照を参照してください: http://emberjs.com/guides/outlets/およびこれ: http://codebrief.com/2012/07/anatomy-of-an-ember-dot-js-app-part-i-redux-ルーティングとアウトレット/

これがどのように機能するかを理解する方法:文字列を使用してコンセントを接続すると、次のことが起こります

  1. Ember はアプリでビュー定義を探し、それをインスタンス化します
  2. Ember はアプリでコントローラー定義を探し、そのインスタンスを作成します
  3. 次のように 2 つを相互にフックします: ビューのコントローラー プロパティを設定し、コントローラーのビュー プロパティを設定します。

--- 最後のステップまでうまく機能します。ビュープロパティをコントローラーに設定できないようです。

JSBin はこちら: http://jsbin.com/ekekir/40/edit

関連コード:

App.Router

App.Router = Ember.Router.extend({
  root: Ember.Route.extend({
    state1: Ember.Route.extend({
      route: '/state1',

      connectOutlets: function (router) {
        router.get('applicationController').connectOutlet('state1')
      }
    })
  })
});

コントローラーとビュー

App.State1View = Ember.View.extend ({ 
  templateName: 'state1',
  submit: function () {
    this.get('controller').doLogView();
    return false;
  }
});

App.State1Controller = Ember.Controller.extend({
  doLogView: function () {
    console.log('Getting controller view:');
    console.log(this.get('view'));
  }
});

最後に、大きな脂肪の null を返します。

私は何か間違ったことをしていますか、それともこれはあるべき姿ですか?

ところで: これは ember-1.0.pre を使用しています。

4

2 に答える 2

3

コントローラーがビューについて認識してはならないというマイク アスキーは正しいです。

ただし、現在の実装では、実際には controller にビューが設定されていますが、予想されるコントローラーには設定されていません。上記の例では、 のviewプロパティがapplicationControllerのインスタンスに設定されますState1View

Ember のソースからの関連コードは次のとおりです。

https://github.com/emberjs/ember.js/blob/master/packages/ember-views/lib/system/controller.js#L140

于 2012-09-12T16:47:04.170 に答える
2

コントローラーはそのコンテンツをレンダリングするビューを認識する必要がないため、これは正常な動作です。依存関係のサイクル (および壊れた設計) が発生します。

依存関係はチェーンに従います: V -> C -> M

また、コントローラーは一度注入され、表示されるたびにビューが作成されます。

于 2012-09-11T13:21:14.363 に答える