この質問のフィドルは次のとおりです(コンソールが開いていることを確認してください):
基本的に、ハンドルバー ブロック ビューを親として持ち、アイテムの配列をループして、アイテムごとに子ブロック ビューを作成します。後で、それらの子がなんらかの方法で変更されるので、そのイベントを検出して処理したいと考えています。
要約コード:
{{#view App.outerView}}
{{#each item in items}}
<h6>Person:</h6>
{{#view App.innerView}}
<dl>
<dt>First Name</dt><dd>{{item.first}}</dd>
<dt>Last Name</dt><dd>{{item.last}}</dd>
</dl>
{{/view}}
{{/each}}
{{/view}}
後の時点で:
controller.get( 'items' ).pushObject( 'new item' );
jsFiddle では、最後の子オブジェクトを常に強調表示したまま (アクティブ = true) にしようとしています。outerView が最初に挿入されると、強調表示が最後の項目に適用され、期待どおりに機能します。後で新しいアイテムを追加すると、ハイライト メソッドが起動しますが、新しいアイテムは表示されません。
これに関する 2 つの質問:
主な質問: 最後のアイテム (マット) が強調表示されないのはなぜですか? 言い換えれば、新しい項目が追加された後
childViews.length
も古い値が報告されるのはなぜでしょうか? これを行うためのより良い方法はありますか?二次的な質問
childViews
:新しいアイテムを追加すると、オブザーバーが 2 回発火するのはなぜですか? (合計 3 回: 最初の挿入で 1 回、新しい子項目の追加で 2 回)
編集:私のニーズをよりよく説明するために、フィドルを少し調整しました。outerView の混合コンテンツ (HTML + innerViews) に注意してください。基本的に、outerView は、ビュー/データの配列/コレクションだけでなく、すべてのコンテンツを子として受け入れる必要があります。
編集 2 : さらなる明確化: 事後にこれらの子ビューを操作することは別の話であり、childViews
(ember ビュー) のコンテンツを操作するか、jQuery を使用して正式な ember ビュー オブジェクトではない可能性のある HTML 要素を操作することによって達成できます。他の手段。ここでの本当の目的は、outerView コンテンツのいずれかが変更されたときに (childView の現在のコピーを使用して) イベントをキャプチャすることです。
編集 3 : ここに Github の問題があります