我基于ajax调用在qooxdoo桌面应用程序中动态创建内容。我正在创建的一些内容中有很多小部件(大约200+)。
我使用谷歌浏览器进行了一些分析,看起来布局管理器占用了大部分处理时间,因为我在容器上为我创建的每个小部件调用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;
});
答案 0 :(得分:1)
你可以
首先将所有小部件添加到“未附加”的容器中,即尚未在任何地方添加的容器或其后代不是布局的一部分
然后将“未附加”容器添加到布局中,触发窗口小部件布局
答案 1 :(得分:0)
当您添加一个小部件时,它会被添加到一个队列中,以便在线程结束后执行,如果在同一个线程上添加许多小部件,则布局重排将执行一次。
因此,如果一个.add()与下一个之间没有异步,则它们位于同一个线程上,并且它们只进行一次重排。
你在配置文件上看到的时间是布局管理器渲染的正常时间,它必须访问dom以了解某些元素的大小,这个操作需要很多,我做的最后一个配置文件更贵操作是“el.innerWidth”。
如果您想使用Qooxdoo,我认为没有什么可做的。