GetScript от jQuery - включая файлы в основную область? - PullRequest
2 голосов
/ 21 января 2012

Я много думал о том, как мне включить файлы в мое приложение backbone.js.В процессе работы я, очевидно, собираюсь объединять свои файлы и минимизировать их, чтобы минимизировать запросы, но во время разработки было бы хорошо просто загрузить все файлы и не вызывать скрипт сборки для каждого небольшого изменения.

Итак, я взглянул на jQuery getScript() -метод.Я опробовал его и смог загрузить мои файлы.

Поскольку я поместил getScript -call в функцию, чтобы убедиться, что файлы загружаются до того, как я запускаю приложение backbone.js, оно выглядитчто каждый загруженный скрипт не входит в глобальную область видимости.

var loader = function () {
     var scripts = ['/app/routers/myrouter.js'];

     for (var i = 0; i < scripts.length; i++) {
         $.getScript(scripts[i], function () {});
     }

     console.log(myrouter); // Works - myrouter is a function
     init(); // Callback - we've loaded all scripts
 };

var init = function () {
    console.log(myrouter); // myrouter is undefined
};

$(document).ready(loader());

1 Ответ

6 голосов
/ 21 января 2012

Ну, во-первых, вы просто вызываете loader() вместо передачи функции:

$(document).ready(loader);

Исправит это

Во-вторых, вы вызываете init право обратного вызовапрочь вместо того, когда все скрипты загружены.Если сценариев много, вам нужно использовать обещания:

    var scripts = ['/app/routers/myrouter.js'];
    for (var i = 0; i < scripts.length; i++) {
        scripts[i] = $.getScript(scripts[i]);
    }


    $.when.apply( $, scripts ).then( init, function(){
        "some script failed";
    });

Синтаксис, использованный выше: $.when( promise1, promise2, ...).then( successCallback, failureCallback) - мы заполняем массив обещаниями и используем .apply, чтобы применить их в качестве аргументов.

http://api.jquery.com/jQuery.when/

http://api.jquery.com/Deferred.then/

...