在ember 1.13之前我正在使用
var containerView = Em.View.views[view_id];
获取具有视图ID的ContainerView实例,并手动将childView添加到此容器视图中,以前工作正常。
从ember 1.13开始,不支持此视图查找。这样做的推荐方法是什么?
问题是同一个containerView有多个具有不同id的实例。所以我需要从查找中获取正确的containerView实例。
谢谢
更新
我有一个父(widget)组件: parentComponent.hbs
.....
{{input value=someBinding1 click='showCalendar'}}
{{calendar-component month=month1 disableBefore=disableBefore1}}
{{input value=someBinding2 click='showCalendar'}}
{{calendar-component month=month2 disableBefore=disableBefore2}}
{{input value=someBinding3 click='showCalendar'}}
{{calendar-component month=month3 disableBefore=disableBefore3}}
.....
基本上我可以有多个日期(输入)字段,点击它们时应该显示一个日历组件。如果我像上面那样编写代码,它将创建日历组件的3个(或尽可能多的日期字段)实例。这些日期字段数是动态的。我不想创建如此多的日历组件,因为我看到移动设备上的性能低迷。
所以我做的是:
.....
{{input value=someBinding1 click='showCalendar'}}
{{calendar-container-view id='calendarContainerView1'}}
{{input value=someBinding2 click='showCalendar'}}
{{calendar-container-view id='calendarContainerView2'}}
{{input value=someBinding3 click='showCalendar'}}
{{calendar-container-view id='calendarContainerView2'}}
.....
calendar-container-view 有一个空的 childViews 数组要启动。 当用户点击输入字段时,我使用Em.View.views [containerViewId]获取相应的containerView实例,并将日历实例附加到它。 单击另一个输入后,我将其从旧的父容器View中删除,并将其添加到新的容器视图中。 因此,只有一个日历实例由 parentComponent.js 创建并删除并添加到容器视图中。
希望它有意义。如果需要,我可以创建一个jsbin。
非常感谢!
答案 0 :(得分:1)
我认为您可以按模型实例而不是views
操作逻辑(我的意思是模型概念,可能是array
个对象或records array
})。
很明显,你有model
(作为一些数组),因为你提到了multiple instances
。
您可以这样做:
{{!-- list of input fields --}}
{{#each model as |item|}}
{{item-input-field item=item value=item.someBinding1 clickInput="setCurrentItemWhenInstanceClick"}}
{{/each}}
{{!-- and one calendar-component --}}
{{#if currentItem}}
{{calendar-component item=currentItem month=currentMonth disableBefore=currentDisableBefore}}
{{/if}}
其中item-input-field
是component
,通过操作input
扩展item
并将其clickInput
传递给父组件或控制器( 行动)。
然后父组件(或控制器)中的setCurrentItemWhenInstanceClick
操作应设置currentItem
,currentMonth
和currentDisableBefore
数据(数据向下到{{ 1}}),以便显示calendar-component
。