【发布时间】:2015-06-16 03:00:22
【问题描述】:
在 ember 1.13 之前我使用的是
var containerView = Em.View.views[view_id];
获取具有视图 id 的 ContainerView 实例,并手动将 childViews 添加到此容器视图中,这在以前可以正常工作。
从 ember 1.13 开始,不支持此视图查找。推荐的方法是什么?
问题是同一个 containerView 有多个具有不同 ID 的实例。所以我需要从查找中获取正确的 containerView 实例。
谢谢
更新:
我有一个父(小部件)组件: 父组件.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 实例并将日历实例附加到它。 单击另一个输入时,我将其从旧的父容器视图中删除并将其添加到新的容器视图中。 所以只有一个由 parentComponent.js 创建并删除并添加到容器视图中的日历实例。
希望这是有道理的。如果需要,我可以创建一个 jsbin。
非常感谢!
【问题讨论】:
-
推荐的做法是重组你的代码不使用视图。如果您确实需要使用视图,请以不需要这种手动查找的方式安排您的代码。如果您发布代码的骨架版本以便我们可以看到您正在尝试做什么,也许我们可以提供更多帮助。例如,谁在创建这些 containerView 的多个实例?它们与什么有关?谁在尝试向它们添加 childView?
标签: javascript ember.js