Есть такая задача каждый метод контроллера приложения, должен уметь ответить как на аякс так и на обычный запросы.
причем ответ каждого метода достаточно сложный интерфейс с кучкой яваскрипта.
Т.е. если запрос обычный, то метод отвечает вместе с layout’ом и всеми скриптами подключенными через CAssetManager,
а если это аякс запрос то никакого layout’a но есть нюансы со скриптами…
в принципе тут два варианта, либо:
-
метод отправляет клиенту HTML без скриптов
-
метод отправляет клиенту HTML со всеми или некоторыми скриптами
но вот как определить с какими нужно отправлять а с какими нет ? Ведь определить какой нужен а какой нет можно только на "клиенте".
Когда я говорю о скриптах, я говорю именно о файлх js (а не инлайн коде)
Решение которое мне закралось в голову:
-
Каким-то образом дать системе знать что скрипты нам нужны но их публиковать не нужно.
-
После того как output готов, подсунуть в него полученный список желаемых скриптов в виде js объекта.
-
На клиенте первым делом проверить подключены ли уже на странице те JS файлы какие присутсвуют в нашем js объекте созданном на п2.
-
Подключить только нужные скрипты
Вопросы:
-
Как получить все подклченные скрипты но при этом не публиковать их? Может быть во время региастрации скрипта можно как то решать этот вопрос, реализовав это в унаследованном классе ?
-
Как на клиенте проверять загружены ли уже файлы - возможный вариант: проходить все тэги script до исполнения любого яваскрипта, и сопостовлять их src тому что пришло с сервера в js объекте созданном в п2. ? и если требуемого файла нету то динамически его подключать, благо путь до него мы имеем уже в п2.
Как вам такой вариант ? или это слишком все усложняет ? Есть ли какой-то иной сособ ? обыскал весь форум и гугл вроде бы готовых решений не нашел.