0

我有一个带有边栏的 Ember 应用程序,其中包含可变数量的小部件。我正在使用 Ember.ContainerView 来存储小部件视图。

填充容器视图工作得很好(所有小部件都按应有的方式呈现)。

问题是当我想更新 ContainerView 时(因为应用程序状态发生变化,应该加载新的小部件),当前的 childViews 不能被删除......如果我调用view.removeChild(child)并且child.remove()对于每个 childView,实际上只有几个被删除。

我认为这与 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),
           ...
        })
    });
4

1 回答 1

2

Em.ContainerView 上有一个 removeAllChildren 方法:

http://emberjs.com/api/classes/Ember.ContainerView.html#method_removeAllChildren

this.removeAllChildren() 应该可以解决问题。

于 2013-01-26T20:19:40.513 回答