0

メイン レイアウト内の任意の順序で任意の数のコア ウィジェットをレイアウトに含めることができるポータルをまとめようとしています。

これをシミュレートするために、いくつかのアウトレットがあります。

<h1>{{title}}</h1>

{{outlet pos1}}
{{outlet pos2}}
{{outlet pos3}}
{{outlet pos4}}
{{outlet pos5}}
{{outlet pos6}}
{{outlet pos7}}
{{outlet pos8}}
{{outlet pos9}}
{{outlet pos10}}

ルーターでは、それらを 1 つずつロードしようとしています。

  connectOutlets: function(router, group) {
    router.get('applicationController').connectOutlet('group', group);
    router.get('groupController').connectOutlet('pos9', 'toDo', App.ToDo.find(41));
    router.get('groupController').connectOutlet('pos3', 'toDo', App.ToDo.find(15));

ただし、複数ある場合は、最終的なコンテキストが使用されます。したがって、この例では、toDo オブジェクトの 2 つのインスタンスを取得します。どちらも ID #15 のものです。

私はこれに正しい方法で取り組んでいますか?アウトレットのレイアウトを固定するのではなく、プログラムでこれを行うことは可能ですか?

ありがとう、ダン

4

1 に答える 1

1

編集:私の答えは、この複雑なソリューションが本当に必要であるという仮定に基づいています。あなたの簡単な例に基づいて、すべての ToDo アイテムに ArrayController を使用できるとも言えます。しかし、複雑な問題に対する私の答えは次のとおりです。

問題は次の 2 行です。

router.get('groupController').connectOutlet('pos9', 'toDo', App.ToDo.find(41));
router.get('groupController').connectOutlet('pos3', 'toDo', App.ToDo.find(15));

基本的にそこで行うことは次のとおりです。

  1. pos9 という名前のアウトレットを「todo」という名前のコントローラーに接続します。このコントローラーのコンテンツを ID 41 の ToDo に設定します。
  2. pos3 という名前のアウトレットを「todo」という名前のコントローラーに接続します。このコントローラーのコンテンツを Id 15 の ToDo に設定します (同じコントローラーのコンテンツをオーバーライドします)。
  3. その結果、両方のアウトレットがコントローラーの同じインスタンスに接続されることになります。この単一インスタンスのコンテンツ プロパティを 2 回設定したため、同じ ToDo になります。中心的な問題は私の観点からです。EmberJS はデフォルトでコントローラーの単一インスタンスを使用します。

したがって、私のソリューション アプローチは、使用しているアウトレットごとに新しい Controller をインスタンス化することです。残念ながら、これにはビューのルックアップも変更する必要があります。ご存じのとおり、Controller と View は名前で一致します。したがって、大まかにアルゴリズムは疑似コードになります。

  1. Controller の新しいインスタンスを作成します。例: var newController = App.ToDoController.create();
  2. このコントローラーを適切な名前でルーターに挿入します。
  3. この名前に基づいて、Ember が一致するビューを見つけられるようにする必要があります。
  4. 最後に、ルーターで connectOutlet を呼び出します。

ご想像のとおり、私は自分でこの問題に遭遇しました。私は以前にこの質問をしましたが、これが解決策です。私は、これが不足している機能だと思います。私はこれを動的アウトレット名と呼んでいます。ここで私の元の質問を参照してください:クリックで要素を展開できる複数の要素のリストを実装する方法は? (動的アウトレット名?)

更新セクションとそこに提供されているフィドルを見てください。ここに提供されている私の擬似コードに気付くでしょう。

現時点ではまだハッキーですが、私にとっては価値があるように見えるので、誰かが私のソリューションを見ることができれば、それはまだ素晴らしいことです. この大きな答えで、これが注目を集めることを願っています:-)

于 2012-11-13T18:11:50.817 に答える