Требуется обходной путь для ошибки ExtJS

У меня есть веб-приложение, использующее 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, даже чтобы добавить пустую кнопку ({}) на каждую панель инструментов. Большое спасибо всем, кто может это понять.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 009
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Если все, что вы делаете, это добавляете на пустую панель

 myPanel.getTopToolbar().add(buttons etc);

Или же

 myPanel.getTopToolbar().addButton(..);

Либо должно работать. Похоже, что цель insertButton - поместить кнопку на непустую панель инструментов.

Не следует ли insertButtons изящно возвращаться к addButtons, если их нет? Я думаю, мы должны рассматривать это как незначительную ошибку в ExtJs ...

Thevs 04.12.2008 00:57
Ответ принят как подходящий

Я не думал, что существует решение, основанное только на CSS.

Для записи я в итоге вставил javascript на страницу, которая переопределяет прототип Ext.Toolbar для функции insertButton (), чтобы проверить наличие this.tr.childNodes ([0]) »и по умолчанию использовать addButton (), если его не существовало.

Вы смотрели на добавление кнопки после того, как панель была отрисована? Может быть что-то вроде:

myPanel.on('render', function() {
   this.getTopToolbar().insertButton(0, [...array of buttons...]);
}, true);

Спасибо, но проблема не во времени. Оказывается, функция insertButton работает только в том случае, если что-то уже есть на панели инструментов.

Eric Wendelin 29.01.2009 20:00

Раньше мне приходилось включать пустую панель инструментов в конфигурацию моего элемента:

tbar: []

Затем (и только после того, как элемент полностью отрисован) используйте метод .add () для вставки кнопок.

Порядок событий попадет к вам каждый раз. Чтобы справиться с этим, нужно время.

Другие вопросы по теме