2012-04-17 3 views
0

У меня есть сценарий, который будет выполняться перед переменной она должна читать будет загружен ..Подождите переменная существует, то сделать что-то в JavaScript

это мой сценарий, который будет выполнен первый

funcThatWaits(varToWait).ready(function(){ 
     //callback time!! 
    alert("varToBeWait is Ready!!"); 
}); 

и это скрипт, который будет рядом быть загружен

var varToWait=null; 

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

Возможно ли это? мой первый скрипт полностью скопирован на функцию $ (document) .ready() jquery, которая ждет полной загрузки DOM ... возможно ли это для JS-переменных?

+2

Какое событие определяет переменную вы в ожидании? – m90

+1

Как переменная делает это * большой вход *? это происходит из результата ajax? или другая функция? – Joseph

+0

это просто переменная, которая выполняется в отдельном js-файле, первый выполненный скрипт находится в отдельном файле js и загружается первым перед переменной. второй скрипт создает переменную и генерируется динамически, поэтому мне нужно знать, существует ли уже существующая переменная –

ответ

1

Если ваша переменная поступает из другой функции (и, возможно, из другой области), то вы можете передать обратный вызов и предоставить ему переменную, когда вторая функция выполняет обратный вызов. вам не нужно ждать, когда он будет существовать, но вы будете дождитесь, пока второй скрипт предоставит его вам.

//in the second script: 

var varIWant = 'foo' 

function fromSecondScript(callback){ 
    callback(varIWant); 
} 

//in the first script: 

function fromFirstScript(){ 
    fromSecondScript(function(theVar){ 
     //"theVar" in this function scope is "varIWant" from the other scope 
    }) 
} 

другой способ сделать это, чтобы иметь скрипт загрузчика, определенный заранее агрегированные обратные вызовы и называть их, как только их переменные устанавливаются:

var aggregator = (function(){ 
    var stored = {}; 

    return { 
     //adds a callback to storage 
     addCallback : function(varName,callback){ 
      if(!stored.hasOwnProperty(varName)){ 
       stored[varName] = []; 
      } 
      stored[varName].push(callback); 
     }, 
     //executes stored callbacks providing them data 
     execute : function(varName,data){ 
      if(stored.hasOwnProperty(varName)){ 
       for(var i=0;i<stored[varName].length;i++){ 
        stored[varName][i](data) 
       } 
      } 
     } 
}()); 

//in the first script add callbacks. you can add any number of callbacks 
aggregator.addCallback('VarExists',function(theVar){ 
    //do what you want when it exists 
}); 

aggregator.addCallback('VarExists',function(theVar){ 
    //another callback to execute when var exists 
}); 

//in the second script, execute the callbacks of the given name 
aggregator.execute('VarExists',theVarYouWantToShare); 
+0

не могу ли я сделать что-то вроде jquery? что проще? привет спасибо за ваш ответ ^^ –

+1

все еще обновляю мой ответ: D – Joseph

+0

ах спасибо ... Я буду ждать вашего ответа: D. Мне нужен очень простой код, потому что мне нужно многократно использовать первый скрипт. Я уже упал на ваш первый ответ (как изучил функции JavaScript), но это не совсем то, что мне нужно. –

Смежные вопросы