这是这个问题的一个小提琴(确保你的控制台打开):
基本上,我有一个车把块视图作为父级,然后循环遍历一组项目并为每个项目创建子块视图。后来,那些孩子以某种方式被修改了,我想检测并处理那个事件。
摘要代码:
{{#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 时,我们将高亮应用到最后一项,它按预期工作。稍后,当我们添加一个新项目时,我们的 highlight 方法会触发,但它看不到新项目。
2关于此的问题:
主要问题:为什么最后一项(马特)没有突出显示?换句话说,为什么在添加了新项目后,
childViews.length
仍然报告旧值?有没有更好的方法来做到这一点?次要问题:为什么
childViews
添加新项目时观察者会着火两次?(总共 3 次:初始插入 1 次,添加 1 个新子项时 2 次)
编辑:我已经稍微调整了小提琴以更好地说明我的需求。注意outerView(HTML + innerViews)的混合内容。基本上,我的 outerView 需要接受任何内容作为子项,而不仅仅是视图/数据的数组/集合。
编辑2:进一步澄清:事后操作这些子视图是一个不同的故事,可以通过使用childViews
(ember视图)的内容或使用jQuery来操作可能不是正式的ember视图对象的HTML元素来完成,或者任何其他方式。这里的真正目标只是在任何 outerView 内容发生变化时捕获事件(使用 childViews 的当前副本)。
编辑 3:这是Github 上的一个问题