0

BasenameControllerconnectOutlet("basename")のインスタンスを自動的に作成しますが、 -helperを使用して同じことを行う方法があるかどうか疑問に思い{{view}}ました。

私は例で見たいくつかのことを試しましたが、どれもうまくいかないようです:

{{view controllerBinding=App.BasenameController}}

{{view controllerBinding=App.basenameController}}

{{view controllerBinding="App.BasenameController"}}

{{view controllerBinding="App.basenameController"}}

controller私も代わりに同じことをしようとしましたがcontrollerBinding、残念ながら成功しませんでした。また、2つの違いがどこにあるのかを正確に知ることもできませんでした。

誰かが私の目標を達成する方法を知っていますか?

4

1 に答える 1

1

あなたはおそらくコンセントを使いたいでしょう。connectOutlet / outlet関数は、他のコントローラー/ビューのペアをレンダリングするためのものです。

人物ビューがあるとしますが、そのビュー内に別のコントローラー/ビューのペアが必要です。このために、名前付きアウトレットを使用する必要があります。テンプレートは次のようになります。

Person View!
{{name}} = the person's name!
{{controller}} = PersonController!
{{outlet other}} = our outlet

次に、ルーター内で別のコントローラー/ビューをそのアウトレットに接続する場合は、personControllerでconnectOutletを使用するだけです。

router.get('personController').connectOutlet('other', 'other');

これにより、OtherControllerとOtherViewが相互に接続され、テンプレートに表示されます。最初のパラメーターはアウトレット名、2番目のパラメーターはコントローラー/ビューです。

これにより、さまざまなコントローラーとビューをそのアウトレットに簡単に交換できます。たとえば、別のconnectOutlet APIを使用すると、次のことができます。

router.get('personController').connectOutlet({
 outletName: 'other',
 controller: router.get('carsController'),
 viewClass: App.CarsView
});

..。

ところで、あなたに元の質問に答えるために。これを行うことにより、ビューから他のコントローラーにアクセスできます{{view controllerBinding="controller.target.otherController"}}。すべてのコントローラーには、ルーターを指すターゲットプロパティがあります。ただし、このコードの使用はお勧めしません。それはもろく、テストするのが難しく、デバッグするのが難しいです、そして将来戻ってきてあなたを噛むでしょう。

于 2012-11-05T03:50:58.550 に答える