0

Ember のネストされたオブジェクトで多くの (痛ましい) 問題が発生しています。かなり標準的なことだと思うので、間違った方法で取り組んでいる可能性があると思います。

「多くの」B を持つオブジェクト A があり、各 B には「多くの」C があるとします (このアーキテクチャは、基本的に私のリレーショナル DB スキーマと一致します)。

これらのネストされたルートは必要ないので、A のようなオブジェクトをレンダリングする自然な方法はパーシャルを使用することだと考えました。何かのようなもの:

A のテンプレート:

...A stuff...
{{#each Bs}}
    {{ partial "show_B" }}
{{/each}}

等々。

問題は、子オブジェクトに独自のコントローラーを持たせたいことです。RC1 ( http://emberjs.com/blog/2013/02/15/ember-1-0-rc.html )以降の新しい itemController があることは知っていますが、これは便利ですが、何らかの制限があります。階層のさらに下に、C オブジェクトがそれぞれ 1 つの D オブジェクトを持っているとします。したがって、C テンプレートは次のようになります。

... C stuff...
{{#with c.D}}
    {{ partial "show_D" }} // How do I get this partial to have its own controller? 
{{/with}}

ここで新しいもの{{control}}が役立つと思いますが、使用するのに多くの問題があります (コンテキストが適切に設定されていません)。さらに、それが追加されたばかりの場合(そしてまだ開発中の場合)、おそらくそれを行う別の方法があるはずです. 最後に、アイテムのリストに「itemController」、単一のアイテムに「{{control}}」という 2 つの異なる API を使用するのは少し奇妙に感じます。どちらの場合もコントローラー。

誰かが私をここで正しい方向に向けることができますか?

ありがとう!

PJ

4

1 に答える 1

0

あなたはすでに正しい方向に進んでいると思います。を使用する必要がありますcontrol。それが追加された理由だと思います。

との違いは、対応するビュー/テンプレートを必要itemControllerとしないため、同じビューにとどまり、テンプレートはインラインのままであるのに対し、別のビューとテンプレートが必要であるように思われます。controlitemControllercontrol

いずれcontrolかが勝った場合、または勝った場合は、現在両方の場合(配列と単一オブジェクト)で機能し、現在はを置き換えることitemControllerができるためだと思います。controlitemController

の代わりにを使用controlした場合は、の代わりにコントローラー、ビュー、およびテンプレートを定義する必要があることに注意してください(または、Ember.jsにそれらを生成させます)。{{#each Bs}}itemControllerpartial

このような:

{{#each Bs}}
  {{control "showB" this}}
{{/each}}

そしてDのために:

{{control "showD" D}}

しかし、私はあなたに同意し、controlまだバグがあり、itemController非常に似てcontrolいるので、両方を持っているのは意味がありません。どちらも比較的新しいので、それがあなたが困難を見つけている理由だと思います。しかし、それはgithubまたはdiscuss.ember.js.comのディスカッションです。

each dArrayばかげた回避策の1つは、Dとuseを含む配列で構成される計算プロパティを作成することです:)しかし、あなたのために仕事itemControllerをしようとする方が明らかに良いでしょう。control

最悪のシナリオでは、{{view}}ヘルパーを使用し、ビューにロジックを配置して、コントローラーとして機能させます(ただし、これはお勧めしません)。

于 2013-03-16T16:19:07.417 に答える