1

私はEmberを初めて使用しますが、アプリケーションのより良いアプローチを見つけるのにかなり迷っています。

アプリケーション:画面は2つの部分に水平に分割されます:

  • 左側はPerson属性(name、lastName、email)を入力するためのフォームです
  • 右側は左側のフォームのグラフィカルビューです

私は正確に最善の解決策を知りません:

解決策1:

  • モデルのPersonオブジェクト(インスタンスは今のところPersonオブジェクトのグローバル変数です)
  • フォームを管理し、属性を検証するPersonFormController
  • フォームを表示するPersonFormView
  • PersonRenderedController:フォームのレンダリングを管理します
  • PersonRenderedView(表示ビューのみ、ユーザーインタラクションなし)
  • 2つのコントローラーには、コンテンツプロパティのpersonグローバル変数への参照があります
  • 「接続アウトレット」を使用してコントローラー/ビューを接続しますrouter.get('applicationController')。connectOutlet('left'、'personForm'); router.get('applicationController')。connectOutlet('right'、'personRendered');

PersonRenderedControllerはあまり有用ではなく、「コンセント接続」に使用されているため、この解決策はわかりません。

解決策2:

  • モデルのPersonオブジェクト(インスタンスは今のところPersonオブジェクトのグローバル変数です)
  • フォームを管理し、属性を検証するPersonFormController
  • フォームを表示するPersonFormView
  • PersonRenderedView(表示ビューのみ、ユーザーインタラクションなし)
  • personRenderedControllerはありません(このビューの表示モードのみであるため、必要ありません)
  • アウトレットはありませんが、一般的なテンプレートで2つのビュー(フォームとレンダリング)を手動で作成します

solution1はおそらくもっと柔軟だと思います(レンダリングされたビューにコントローラーが必要な場合)

アドバイスをいただけますか?

4

1 に答える 1

1

解決策 1 の方が良いようです。アウトレットで行くことは常に良い考えです。この場合、PersonRenderedController を作成する必要はありません。connectOutketin は、ニーズに合った方法で使用できます。次の段落はソースからのもので、オプション ハッシュでこのメソッドを使用する方法を示しています。

*/ connectOutlet: function(name, context) { // 引数を正規化します。サポートされている引数: // // 名前 // 名前、コンテキスト // アウトレット名、名前 // アウトレット名、名前、コンテキスト // オプション // // オプション ハッシュには次のキーがあります。コントローラーとビュー // を使用します。// これが渡された場合、名前によってビューとコントローラが決定されます。// コンセント名: // 入力するアウトレットの名前。デフォルト: 'view' // viewClass: インスタンス化するビューのクラス // コントローラー: 渡すコントローラー インスタンス // ビューに // コンテキスト: an // コントローラーのオブジェクトになりcontent、 // テンプレートのコンテキストになります。

このようにして、1つのコントローラーを人用に再利用し、他のビューにも再利用できます。

router.get('applicationController').connectOutlet({
   outletname: "right",
   viewClass : App.PersonRenderedView,
   controller: router.get("personFormController")
 })

したがって、私が提案するのは、より明示的なバージョンの connectOutlet を使用することだけです。これにより、名前の一致に基づくデフォルトのアプローチとは対照的に、より多くの制御が可能になります。

于 2013-01-01T23:41:00.627 に答える