Реализация функции include
Здравствуйте. Опыта в js у меня пока совсем не много. В общем возникла идея в своем web приложении реализовать вот такую систему:
Допустим, что в HTML шаблоне будет: <head> <script type = "text/javascript" src = "/js/MyLib.js"></script> <script type = "text/javascript" src = "/js/scripts/SomePage.js"></script> </head> А в файле somePage.js допустим должно быть что-то вроде: MyLib.include('Extern.Prototype'); MyLib.include('Extern.Scriptaculous'); MyLib.include('MyLib.MyWiget.MyForm') (function( ) { MyLib.Scripts.SomePage = { // js код для somePage с использованием подключенных библиотек } })( ); В MyLib.js есть функция include, для присоединения нужных скриптов. Она определяет, не присоединен ли данный модуль, если нет инклудит его таким образом: try { document.write('<script type = "text/javascript" src = "' + finalPath + '"><\/script>'); } catch(e) { var script = document.createElement('script'); script.type = 'text/javascript'; script.src = finalPath; document.getElementsByTagName('head')[0].appendChild(script); } Иерархия объектов построена в соответствии в иерархией директорий. Получается у нас есть определенный шаблон на сервере /scripts/index.tpl и для него js код в /js/scripts/Index.js, там MyLib.Scripts.Index = {}. И в нем подключены библиотеки для его кода. Но вся эта реализация летит в трубу(( Получается, что браузер присоеденяет сначало "/js/scripts/SomePage.js", а только потом инклуды которые в нем прописаны, соответственно ничего не работает, insertBefore не помогает(( Как заставить подобную модель работать? |
Динамическая подгрузка (или include) скриптов нужна в исключительных случаях, в подавляющем большинстве лучше на стороне сервера объединять скрипты в один файл, сжимать и отдавать клиенту, так как более приоритетным является снижение количества запросов, а не нескольких килобайт отдаваемых статичных данных.
То есть делаете запрос, например, на: <script type = "text/javascript" src = "/js/alljs.php"></script> А этот alljs.php собирает лежащие в директории /js/ файлы в кучу: header('Content-type: text/javascript; charset=utf-8;'); header('Expires: ' . date('r', mktime(0, 0, 0, date('m'), date('d') + 1, date('Y'))) ); echo file_get_contents('MyLib.js') . PHP_EOL . PHP_EOL; echo file_get_contents('prototype.js') . PHP_EOL . PHP_EOL; echo file_get_contents('scriptaculous.js') . PHP_EOL . PHP_EOL; echo file_get_contents('MyLib.MyWiget.MyForm.js') . PHP_EOL . PHP_EOL; echo file_get_contents('SomePage.js') . PHP_EOL . PHP_EOL; Каждый раз объединять файлы конечно только на этапе разработки нужно. |
Не надо заставлять работать подобную модель. Надо собирать все js-файлы в один.
|
Спасибо за советы, приму во внимание.
|
на стадии разработки удобно иметь подключение всех файлов по отдельности. http://mojura.110mb.com/i-component/...n/-/-/index.js
|
Часовой пояс GMT +3, время: 20:21. |