我有一个带有侧栏的Ember应用程序,其中带有可变数量的小部件。我正在使用Ember.ContainerView来存储小部件视图。
填充容器视图可以很好地工作(所有小部件均按应有的方式呈现)。
问题是,当我要更新ContainerView时(由于应用程序状态更改,应加载新的小部件),无法删除当前的childViews ...如果我为每个childView调用view.removeChild(child)
和child.remove()
,则只有一个实际上很少被删除。
我认为这与Ember为每个remove()
调用更新DOM有关,但我无法弄清楚。我也尝试过仅使用this.set('childViews',[])
而不是单独删除每个视图,但这会破坏整个视图。
我在这里想念什么吗?
码:
// Clear current views
this.get('childViews').forEach(function(_view) {
view.removeChild(_view);
_view.remove();
});
var view = this,
childViews = this.get('childViews');
// Create new views
this.get('controller.content').forEach(function (widgetData) {
childViews.pushObject(App.WidgetView.create({
controller: App.WidgetController.create(widgetData),
...
})
});
最佳答案
Em.ContainerView上有一个removeAllChildren方法:
http://emberjs.com/api/classes/Ember.ContainerView.html#method_removeAllChildren
this.removeAllChildren()应该可以解决问题。