1

例として、ある特定のアプリケーション状態には、背景コンテナをレンダリングするだけのホームビューがある場合があります。

App.EditView = Ember.View.extend({
      templateName:  'edit-template',
 })


App.EditController = Ember.ObjectController.extend({
      title: 'Edit state',
})

この状態に移動すると、インスタンス化されます。

App.editRouter = Ember.Route.extend({

    route: '/edit',

    connectOutlets: function( router, context ){           
        router.get('applicationController').connectOutlet( 'mainOutlet', 'edit' )
    }
})

ここで、ユーザーは新しいビューとコントローラーにマップする新しいdiv要素を手動で宣言できます(モデルですが、ここではあまり関係ありません)。新しいdivは、editViewによってレンダリングされたdivの子である場合とそうでない場合があります。

私がやっている現在の方法

App.smallView1 = App.SmallView.create({ 
     controller: App.smallController1
}).append()

App.smallController1 = App.SmallController.create()

ご覧のとおり、ここでは、ビューとコントローラーがどの状態で宣言されているかを示すものはありません。私が混乱していること:

このビューとコントローラーのペアと、EditViewおよびEditControllerのインスタンスとの関係は何ですか?

ペアとeditRouterの関係は何ですか?

明示的に指定する必要のある依存関係があるべきですか?

4

1 に答える 1

1

このビューとコントローラーのペアはルーターによって使用されていないようです。そのため、このビューを勝った要素に追加する場合を除いて、ルートを作成し、アウトレットをビューとコントローラーのペアに接続する必要があります。ルートごとに変更しないでください。また、他のビューとコントローラーのペアとは何の関係もありません。

あなたの質問に関して:

このビューとコントローラーのペアと、EditViewおよびEditControllerのインスタンスとの関係は何ですか?

A:コードは、現状では、スモールビューとコントローラーとエディットビューとコントローラーの間に直接的な関係はありませんが、違いは、ペアが「作成」されるのEditViewEditControllerはなく、アプリケーションに「与えられる」ことです。独自の初期化ロジック(initialize)を介して必要な場合、または必要なときにビューのインスタンスを作成するときに、その型をインスタンス化することに注意してください。ペアは、インスタンス名が「1」で終わるため、ルーターsmallView1smallController1はおそらく適していません。Emberがそれを期待しているかどうかはわかりませんが、とにかく、これらはインスタンス化され、「生きている」オブジェクトとしてアプリケーションに直接接続されています。これは、ルーターを使用する場合は必要ありません。これはあなたの質問に答えますか?

ペアとeditRouterの関係は何ですか?

A:コードでは、そのルート上にあるときのアプリケーションeditRouterの状態(Routeextends以降)の定義です。Stateこれは、特定の状態にあるときに、特定の処理が必要であることをフレームワークが理解していることを意味します。たとえば、その状態に必要なビューの読み込み、ビューに表示されるデータの読み込みなどです。これは、を介して行われますconnectOutlet。この特定のルートでは、との別の署名を使用してとを手動で指定しsmallView1ない限り、との関係はありません。smallController1connectOutletviewClasscontroller

明示的に指定する必要のある依存関係があるべきですか?

A:はい。を使用する場合Router、アプリケーションには、という名前のコントローラーが必要ApplicationControllerです。また、を呼び出す場合connectOutlet、渡す名前は1つのビューとコントローラーに対応している必要があります(コントローラーは必須ではないかもしれませんが、現時点ではわかりません)。したがって、と言うと、フレームワークは慣例に従ってconnectOutlet('about')名前が付けられたビューを探し、このビューをインスタンス化して、コンテナビューの適切なアウトレットにレンダリングします。AboutView

必要に応じて、コントローラーはルーターにどのようにアクセスしますか?

A:アプリケーションのどの時点でも、アプリケーションのApp.router名前が「App」で、ルーターの名前が「Router」であると想定してルーターにアクセスできます。したがって、コントローラーのどのメソッドでも、たとえば、ルーターを使用して次のことができます。遷移:App.router.transitionTo('root.index.home')

于 2012-11-28T05:32:29.320 に答える