Доброго всем времени суток. Я работаю над интерфейсом с динамическими табами и ajax: по аяксовому запросу открываются новые табы, возможность закрывать, скрывать ненужные и прочее. Суть проблемы с которой я столкнулся: допустим в табу загружается форма в которой есть ckeditor, при открытии второй табы с такой же формой в ней не отображается ck, но добавляется ещё один в первую форму - как можно избежать этого? Предполагал решить это так - в аяксовом запросе передавать некую уникальную переменную, допустим количество открытых вкладок с такими же формами как запрашиваемая и добавлять эту переменную к имени полей загружаемой формы, чтобы имена полей в одинаковых формах не пересекались - насколько такое решение “криворуко” и возможно ли решить это другим способом? Ещё одна как мне кажется проблема - после закрытия табы в памяти остаются весь js который был загружен вместе с контентом табы, таким образом после открытия допустим 20 табов с ckeditor’ом в памяти висит столько же скриптов - возможно ли выгружать скрипты после закрытия табы? В jquery по этой теме есть event unload, но встретил только его использование на закрытие окна браузера. Буду рад любой помощи.
если загружен первый раз - отдаем скрипты, если не первый - не отдаем. Таким образом получилось, что при загрузке самой первой формы с ck загружаются все его скрипты, при загрузке последующих - рендерится только форма и скрипт с реплейсом настроек, ещё и во времени экономия получилась. Таким же образом думаю можно поступать со многими скриптами, хотя возможно есть решение лучше, но я его не знаю.
Другая проблема: uncaught exception: [CKEDITOR.editor] The instance "Category_catDescription" already exists. - собственно то же про что я уже писал - при загрузке формы с полями имеющими те же имена, что загруженная ранее форма - кто-нибудь поделитесь решением.
Вот, кстати, используя мой метод подключения ck и renderPartial(…, …, false, true) таки удалось решить проблему:
uncaught exception: [CKEDITOR.editor] The instance "Category_catDescription" already exists.
Уж не знаю какое этому логическое объяснение, но как вариант, каждый Ajax-запрос затирает старый CKEDITOR. Да, накладно, но наверное это можно обойти, если после загрузки ckeditor.js сделать копию CKEDITOR и перед каждым Ajax-запросом подсовывать ее вместо CKEDITOR.
Попробовал предложенный вами метод: при его использовании лучше всего будет, как мне показалось, удалить registerScriptFile метод из контроллера виджета, чтобы ck не загружался каждый раз заново, а про то что с uncaught exception таким методом справиться - у меня не срабатывает, потому что на одной странице у меня аяксом может быть загружено несколько одинаковых форм, в каждой из которых есть ck и в таком случае я вижу решение этой проблемы в объявление уникальных имен полей и id для каждой формы, то есть:
и так для каждой новой загруженной формы, но как это сделать лучше - я не знаю, один из вариантов - передача доп. GET переменной при отправке аяксового запроса на загрузку формы, которая каждый раз будет добавляться к имени и id полей формы. А может быть я вообще не в том вижу корень проблемы.
Помогите пожалуйста решить: в лэйауте страницы зарегистрирован jquery.js, при загрузке с помощью ajax новой вкладки с ajaxSubmitButton джквери загружается ещё раз - как избежать повторной загрузки библиотеки?
я точно не знаю, но у меня в приложении логика такая.
jquery в layout не подключается. Подключаются только css файлы. А подключение js функционала происходит в файлах фреймворка в widgets. Ну например в widget CTreeView.php подключение такое (в init()):