I осуществляет контроллер сценария по требованию, основанный на getscript Jquery, это выглядит следующим образом:как вызывать динамически загружаемой функцию яваскрипта
function controller = function(){
var script = function(){
var scripts = {};
return {
load: function(jsurl){
$.getScript(jsurl, null);
},
run: function(js){
window[js].apply(this,null);
}
}
};
return {
script: script()
};
}
var ctlr = controller();
то здесь удаленный скрипт с функцией для загрузки - remote.js
function remotefunc(){
alert('remotefunc invoked');
}
и вот как все это должно работать, в основном скрипте:
ctlr.script.load('remote.js'); // remote script successfully loaded
ctlr.script.run('remotefunc'); // got an error, window['remotefunc'] undefined
, но, как вы можете видеть, «remotefunc» определен в глобальной области «окна», поэтому объект окна должен иметь возможность «видеть» его.
Я думал, что проблема была, вероятно, укупорочное материал в определении «контроллер», так что я сделал прямой $ .getScirpt без использования «контроллера»:
$.getScript('http://path/to/remote.js', function(){
window['remotefunc'].apply(this, null); // this worked
});
странно. Итак, речь идет о реализации «контроллера» (мне это нужно)! Кто-нибудь может помочь мне с этим? Как исправить реализацию «контроллера», так что
window[js].apply(this,null);
может на самом деле работать?
Thanx.
я бы не сделать метод синхронно. Весь асинхронный процесс заключается в том, что выполнение не блокирует сетевую задержку. – thedz
@ Kane: Спасибо! Поместите свой код до $ .getScript, проблема остается, хотя – Shawn