полный вопрос обратного вызова yepnope - PullRequest
3 голосов
/ 08 сентября 2011

Я использую «двухэтапное представление», где у меня есть шаблон макета (общий для всех страниц) с загрузкой yepnope (в заголовке html) jQuery и некоторыми плагинами. Что-то вроде:

yepnope(['/path/to/jquery.js', '/path/to/jquery.plugin-common.js']);

Иногда мне нужен другой плагин, поэтому во внутреннем шаблоне я делаю дополнительные (в теле html):

yepnope('/path/to/jquery.plugin-additional.js');

Теперь, когда мне нужно сделать магию js, могу ли я безопасно сделать только:

yepnope({
    complete: function(){...}
});

Итак, вопросов на самом деле два:

  1. Полный обратный вызов запускается после завершения загрузки стека глобальных ресурсов? Таким образом, безопасно «зарегистрировать» этот полный обратный вызов в любом месте, предполагая, что все необходимые ресурсы были зарегистрированы ранее?

  2. Могу ли я безопасно вызвать yepnope только с помощью опции «завершить» обратного вызова? Я имею в виду, пока я ничего не "тестирую" и мои ресурсы уже зарегистрированы ...

Я попробовал это, и это сработало, но я не до конца осознаю, если это внутреннее устройство, поэтому я просто хочу убедиться, что я не делаю что-то не так ... Заранее спасибо.

-

И последнее. инструкция при предзагрузке! говорит:

yepnope({
    load: 'preload!jquery.1.5.0.js',
    callback: function (url, result, key) {
        window.jQuery; // undefined (but it's cached!);
    }
});

Не могли бы вы объяснить, о чем это? Я полностью упускаю суть здесь ...

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Я могу помочь на предзагрузке! вопрос. Идея предварительной загрузки! в том, что yepnope загрузит файл, но не выполнит его. Он передает файл jQuery, но он все равно не будет определен после вызова обратного вызова, поскольку он не был внедрен в виде сценария на страницу.

0 голосов
/ 18 июля 2012

По-моему, вы делаете это неправильно. Я удивлен, что это работает, но, возможно, ваши скрипты загружаются до вызова функции complete. Я думаю, что вы должны сделать это:

yepnope({
    load: ['/path/to/jquery.js', '/path/to/jquery.plugin-common.js']
    callback: {
        "jquery.js": function () {
            console.log("jquery loaded!");
        },
        "jquery.plugin-common.js": function () {
            console.log("plugin loaded!");
        }
    }
});

А для дополнительного плагина в теле html:

yepnope({
    load: '/path/to/jquery.plugin-additional.js'
    callback: function () {
        $(document).ready(function(){
            console.log("plugin-additional loaded!");
        });
    }
});

Конечно, замените console.log() вашим кодом, связанным с каждым плагином, который вы можете безопасно выполнить в этом контексте.

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

...