Ember 1.13,查看查找

时间:2015-06-16 03:00:22

标签: javascript ember.js

在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。

非常感谢!

1 个答案:

答案 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-fieldcomponent,通过操作input扩展item并将其clickInput传递给父组件或控制器( 行动)。

然后父组件(或控制器)中的setCurrentItemWhenInstanceClick操作应设置currentItemcurrentMonthcurrentDisableBefore数据(数据向下到{{ 1}}),以便显示calendar-component