Layout 当大量内容添加到容器中时,是否有方法暂停qooxdoo布局管理器?

Layout 当大量内容添加到容器中时,是否有方法暂停qooxdoo布局管理器?,layout,dynamic,containers,qooxdoo,Layout,Dynamic,Containers,Qooxdoo,我正在基于ajax调用在qooxdoo桌面应用程序中动态创建内容。我正在创建的一些内容中有很多小部件(大约200多个) 我用google chrome做了一些评测,看起来大部分处理时间都被布局管理器占用了,因为我正在为我创建的每个小部件调用容器上的add() 有没有一种方法可以在我添加所有小部件时暂停布局管理器,然后在最后运行一次 有没有更好的方法来动态地向容器中添加大量小部件 下面是我正在做的一个例子: var container = new qx.ui.container.Composite

我正在基于ajax调用在qooxdoo桌面应用程序中动态创建内容。我正在创建的一些内容中有很多小部件(大约200多个)

我用google chrome做了一些评测,看起来大部分处理时间都被布局管理器占用了,因为我正在为我创建的每个小部件调用容器上的add()

有没有一种方法可以在我添加所有小部件时暂停布局管理器,然后在最后运行一次

有没有更好的方法来动态地向容器中添加大量小部件

下面是我正在做的一个例子:

var container = new qx.ui.container.Composite(new qx.ui.layout.Flow());

var groupbox = new qx.ui.groupbox.GroupBox();
groupbox.setLayout(new qx.ui.layout.Grid(10, 10));
container.add(groupbox);

// loop through data received from AJAX call and add it to the group box
var row = 0;
data.each(function(pair) {
    var label = new qx.ui.basic.Label(pair.key);
    var field = new qx.ui.form.TextField(pair.value);
    groupbox.add(label, {row: row, column: 0});
    groupbox.add(field, {row: row, column: 1});
    ++row;
});
你可能

  • 首先,将所有小部件添加到一个“未附加”容器中,即一个尚未添加到任何位置的容器或其上升部分不属于布局的一部分

  • 然后将“unattached”容器添加到布局中,触发小部件布局


  • 当您添加一个小部件时,它将被添加到一个队列中,在线程结束后执行。如果您在同一线程上添加多个小部件,则布局回流将执行一次

    因此,如果一个.add()和下一个之间没有异步,则它们位于同一线程上,并且只进行一次回流

    您在配置文件上看到的时间是布局管理器渲染所需的正常时间,它必须访问dom才能知道某些元素的大小,并且此操作需要花费很多时间,我上一次做的配置文件更昂贵的操作是“el.innerWidth”


    我认为如果你想使用Qooxdoo,在那里没有什么可做的。

    好主意,但它不起作用。我将行“container.add(groupbox);”移到循环下面,不幸的是加载时间没有任何改进。我一直认为,布局管理器是由计时器激活的,而不是通过add。。。因此,当您在代码中时,它无论如何都不会被激活。