Как удалить все вкладки из TabView?
У меня есть простой код для удаления всех вкладок из TabView, но, как вы можете видеть, некоторые вкладки все еще там. Поэтому мне нужен совет, как правильно удалить все вкладки.
Пример детской площадки http://tinyurl.com/k33r6nz
Или, может быть, лучше воссоздать TabView, не так ли?
3 ответа
Вместо удаления одной страницы за раз вы можете удалить все сразу, вызвав метод _removeAll(). ссылка на код http://tinyurl.com/pa6ct7r
Может быть немного (много) поздно, но так как pages
это ссылка, вы также можете повторить это с некоторое время:
var pages = container.getChildren();
while (pages.length > 0) {
container.remove(pages[0]);
}
Проблема с вашим кодом в том, что вы модифицируете массив, по которому вы перебираете:
var pages=container.getChildren();
for(var i=0;i<pages.length;i++){
container.remove(pages[i]);
}
pages
является ссылкой на массив, который модифицируется .remove()
действие. Таким образом, при удалении страниц [0] все элементы в массиве страниц смещаются влево. То, что было страницами [1], становится страницами [0], и при следующем раунде доступ к страницам [1] - это то, что раньше было страницами [2]. Таким образом, все остальные элементы пропускаются. Вам лучше создать копию массива как
var pages=qx.lang.Array.clone(container.getChildren());
...
и это работает. Выражение pages.length больше не является проблемой, поскольку цель итерации не изменяется в цикле. Я думаю, что это также чище, чем всегда удаление страниц [0] (как это предлагается в комментарии к вопросу). Вот немного измененная версия вашего кода: http://tinyurl.com/lexwry5
Что касается воссоздания TabView, как правило, лучше сохранить существующие виджеты и использовать их, если это возможно, а не уничтожать и заново создавать их.