Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Асинхронная подгрузка скрипта с немедленным выполнением его кода (https://javascript.ru/forum/misc/28973-asinkhronnaya-podgruzka-skripta-s-nemedlennym-vypolneniem-ego-koda.html)

bukvaG 09.06.2012 12:40

Асинхронная подгрузка скрипта с немедленным выполнением его кода
 
Всем добрый день. Хотелось бы сказать "коллеги", но я с js на большое "Вы".
Суть моего незнания такова. Есть скрипт, который грузится вместе с о страницей
class.js (например)
(function(window){
 // Включение "строгого" режима
 'use strict';
 ...
  // Коллекция классов
  function Cls(){
   // Объект-справочник
   var classes = {};
   
   // Добавление скрипта на страницу
   function AddScript(p_name){
    // Получение элемента-родителя
    var parent = document.getElementsByTagName('head')[0];
    if(parent == undefined){
     throw new Error('Ошибка: родительский элемент не найден.');}
    
    // Создание элемента-скрипта
    var script = document.createElement('script');
    // Установка атрибутов
    script.setAttribute('type','text/javascript');
    script.setAttribute('src',p_name+'.js');
    // Добавление элемента-скрипта к элементу-родителю
    parent.appendChild(script);
    
    return;
   }
   
   // Добавление свойства к объекту
   Object.defineProperty(this,'Button',{
    enumerable:false, // перечислимость
    configurable:false, // конфигурируемость
    get: function(){
     // Если в справочнике нет нужного класса
     if(classes['Button'] == undefined){
      AddScript('Button');
     }
     // Возврат значения свойства
     return classes['Button'];
    },//get
    set: function(value){
     
    }//set
   });
   
   // Добавление класса в справочник
   this.AddClass = function(f_name,f_value){
    classes[f_name] = f_value;
   }
  }
  
  window.cls = new Cls();
 ...
}(window));

и есть некий
Button.js
(function(window){
 // Добавление класса
 window.cls.AddClass('Button',function(p_param){
  // Это функция-конструктор класса
 });
}(window))

Ну я думаю уже многим стало понятно чего бы я хотел добиться вызовом
var Button = window.cls.Button;

И так же большинству и без прогона становится понятно что то чего я хочу я хрен получу, так как асинхронность.
Собственно, таки, растолкуйте мне убогому (начинающему) фреймворко-писателю как мне это реализовать? Может кто видел в каких аццких кодах "динамическую догрузку модулей"?

Заранее благодарен за любые комменты/ответы/"пиночки".

Deff 09.06.2012 12:47

bukvaG, Как Вариант:
Вызывать из концовки скрипта class.js
Некий скрипт обрамление, который осуществляет подгрузку и запуск скриптов использующих библиотеку

nerv_ 09.06.2012 13:55

Не понял, что Вы хотите. Если без чего-то можно обойтись (не загружать), лучше так и поступить. Если у вас проблемы с асинхронностью, используйте функцию обратного вызова (callbalck).

devote 09.06.2012 18:59

Юзайте JSONP или если скрипт на своем домене XmlHttpRequest

bukvaG 11.06.2012 17:55

Проблема (хотя это скорее "хотелка по незнанию") пока не решена, но я решил пока отложить ее решение. Но все равно всем спсб за комменты


Часовой пояс GMT +3, время: 05:14.