У меня есть веб-приложение, использующее Ext-JS 2.2. В определенном компоненте у нас есть пустая панель инструментов, к которой мы пытаемся добавить кнопку, используя
myPanel.getTopToolbar().insertButton(0, [...array of buttons...]);
Однако в IE6 / 7 это не удается из-за строк 20241-20242 в ext-all-debug.js:
var td = document.createElement("td");
this.tr.insertBefore(td, this.tr.childNodes[index]);
Поскольку «this.tr.childNodes ([0])» еще не существует в IE, это не удается с «Недопустимым аргументом».
НАСТОЯЩИЙ ВОПРОС: Могу ли я, используя CSS, подобный приведенному ниже, добавить дочерний элемент на каждую панель инструментов <tr>, чтобы найти this.tr.childNodes [0]:
div.x-toolbar tr:after { content: " "; }
Я полностью понимаю, что это взлом, но по юридическим причинам я не могу изменить какой-либо Javascript, даже чтобы добавить пустую кнопку ({}) на каждую панель инструментов. Большое спасибо всем, кто может это понять.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если все, что вы делаете, это добавляете на пустую панель
myPanel.getTopToolbar().add(buttons etc);
Или же
myPanel.getTopToolbar().addButton(..);
Либо должно работать. Похоже, что цель insertButton - поместить кнопку на непустую панель инструментов.
Я не думал, что существует решение, основанное только на CSS.
Для записи я в итоге вставил javascript на страницу, которая переопределяет прототип Ext.Toolbar для функции insertButton (), чтобы проверить наличие this.tr.childNodes ([0]) »и по умолчанию использовать addButton (), если его не существовало.
Вы смотрели на добавление кнопки после того, как панель была отрисована? Может быть что-то вроде:
myPanel.on('render', function() {
this.getTopToolbar().insertButton(0, [...array of buttons...]);
}, true);
Спасибо, но проблема не во времени. Оказывается, функция insertButton работает только в том случае, если что-то уже есть на панели инструментов.
Раньше мне приходилось включать пустую панель инструментов в конфигурацию моего элемента:
tbar: []
Затем (и только после того, как элемент полностью отрисован) используйте метод .add () для вставки кнопок.
Порядок событий попадет к вам каждый раз. Чтобы справиться с этим, нужно время.
Не следует ли insertButtons изящно возвращаться к addButtons, если их нет? Я думаю, мы должны рассматривать это как незначительную ошибку в ExtJs ...