Задать вопрос
@kostush

Как определить событие JS b и решить ошибку Uncaught Error: The toolbar instance with the same 'id' already exists?

День добрый. Подскажите, плиз, как решить .
При обновлении коробки изменился интерфейс коммерческого предложения ( стал как для сделок и лидов).
В старом интерфейсе был добавлен таб, который открывал грид из кастомного модуля с выводом данных из БД.
После обновления мы добавили файл result_modifier.php в темплейт crm.entity.details немного видоизменив из предыдущего итерфейса. Нужные табы добавились
При клике по табу грид с данными открывается, но возникла проблема следующего рода.
При клике на шестеренку настройки "вид грида" и выборе дополнительных колонок, после сохранения получаем на экране пустой грид и в консоли ошибку

script.js?16424091709846:20 Uncaught Error: The toolbar instance with the same 'id' already exists.
at Object.create (script.js?16424091709846:20:11)
at :534:23
at Function.BX.evalGlobal (core.js:2096:1)
at inlineScripts (core_ajax.js:522:1)
at core_ajax.js:527:1
at core.js:2488:1
at load (core.js:2562:1)
at loadAsync (core.js:2483:1)
at Function.BX.load (core.js:2409:1)
at Function.BX.ajax.processScripts (core_ajax.js:526:1)
Не могу найти - где мы передаем неверный id или не определяем его , что такое происходит
Как разобраться ? Спасибо
61fd198a89304291052947.png
61fd19a6cbf71491946893.png
61fd1995dc897513971550.png
  • Вопрос задан
  • 460 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
gromdron
@gromdron Куратор тега Битрикс24
Работаю с Bitrix24
После обновления мы добавили файл result_modifier.php в темплейт crm.entity.details немного видоизменив из предыдущего итерфейса. Нужные табы добавились


Этот компонент больше не нужно модифицировать.
Вкладки можно добавлять на событии: https://dev.1c-bitrix.ru/api_d7/bitrix/crm/systemc...
Это наиболее превильный путь

При клике по табу грид с данными открывается, но возникла проблема следующего рода.


Все верно - просто способ который раньше использовали не подходит для новой карточки.

Начнем с того что вы поймете как работает новая карточка. Когда пользователь открывает детальную страницу, открывается карточка, но физически загружаются только 3 части: первая страница, страница товаров и общий макет, который является обработчиком вкладок. Когда вы нажимаете на вкладку происходит запрос который подгружает данные этой вкладки на страницу и отображает ее пользователю.
Если вы в своем компоненте обрабатывается POST-запрос, например форму, то сделав отправку вы обнаружите что ваш компонент не загружен (и как следствие не обработал POST-запрос), а вам выводится первая страница.

Теперь про работу грида.
Для того чтобы принемить настройки, грид использует POST-запрос. Если параметры куда нужно отправлять POST запрос не переданы, то этот запрос будет направлен на ту же страницу, которая сейчас открыта. Т.е. понимаете, что вы не передали url, соответственно у вас происходит ситуация выше - отправляется POST запрос на страницу, где вашего компонента с гридом нет. Отсюда он не может получить ответ и его поведение такое какое вы видите.

Как это счастье побороть?

1. Создать физическую страницу, на которой разместите компонент.
2. На этой странице у компонента грида задайте параметры OPTIONS_HANDLER_URL и BACKEND_URL
3. Используйте события, чтобы добавить страницу из п.1 в таб.
Ответ написан
Razor0077x
@Razor0077x
Говнокодер
Добавьте в грид:
'AJAX_MODE' => 'Y'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы