【发布时间】:2013-10-28 13:16:04
【问题描述】:
我有一个简单的代码可以从 TabView 中删除所有选项卡,但是您可以看到一些选项卡仍然存在。所以我需要建议如何正确删除所有标签。
游乐场示例http://tinyurl.com/k33r6nz
或者也许更好的是重新创建一个 TabView,不是吗?
【问题讨论】:
-
2 件事。第一个;在 i
标签: javascript qooxdoo
我有一个简单的代码可以从 TabView 中删除所有选项卡,但是您可以看到一些选项卡仍然存在。所以我需要建议如何正确删除所有标签。
游乐场示例http://tinyurl.com/k33r6nz
或者也许更好的是重新创建一个 TabView,不是吗?
【问题讨论】:
标签: javascript qooxdoo
你的代码的问题是你修改了你正在迭代的数组:
var pages=container.getChildren();
for(var i=0;i<pages.length;i++){
container.remove(pages[i]);
}
pages 是对由.remove() 操作修改的数组的引用。因此,当删除 pages[0] 数组中的所有元素时,pages 数组中的所有元素都会向左移动。 pages[1] 变成 pages[0] 并且下一轮访问 pages[1] 是过去的 页[2]。因此,所有其他元素都被跳过。你最好创建一个数组的副本,如
var pages=qx.lang.Array.clone(container.getChildren());
...
它有效。 pages.length 表达式不再是问题,因为迭代目标在循环中没有被修改。我认为这也比总是删除 pages[0] 更干净(正如问题评论中所建议的那样)。这是您的代码稍作修改的版本: http://tinyurl.com/lexwry5
至于重新创建 TabView,通常最好保留现有的小部件并尽可能重用它们,而不是销毁并重新创建它们。
【讨论】:
您可以通过调用 _removeAll() 方法一次性删除所有页面,而不是一次删除一页。 链接代码http://tinyurl.com/pa6ct7r
【讨论】:
可能有点晚了,但由于pages是一个参考,你也可以用一段时间迭代它:
var pages = container.getChildren();
while (pages.length > 0) {
container.remove(pages[0]);
}
【讨论】: