Полагаю, ваш сценарий должен выглядеть примерно так.
В вашем случае последние операторы to находятся вне функции "ready" и, следовательно, могут выполняться до завершения загрузки библиотек AjaxSolr.
var Manager;
(function ($) {
$(function () {
Manager = new AjaxSolr.Manager({
solrUrl: 'http://example.solrstuff.org/solrjs/select'
});
Manager.init();
//moved the next two calls inside the initialization block
Manager.store.addByValue('q', '*:*');
Manager.doRequest();
});
})(jQuery);
Чтобы ответить на вопрос из комментария (не относится к реальному вопросу, просто пропустите, если вы понимаете код самостоятельно)
Внутренний $(function (){...});
- это просто сокращение для $(document).ready(function (){...});
.
external-one: (function($){ })(jQuery);
определяет анонимную безымянную функцию function($){ }
с параметром и немедленно вызывает функцию, передающую объект jQuery в качестве параметра. Итак, внутри $
находится объект jQuery
. Я предполагаю, что они используют этот синтаксис, поскольку AjaxSolr не зависит от фреймворка, и когда вы используете какой-то другой фреймворк, вы просто заменяете (...)(jQuery)
на (...)(otherFrameworkObjectInstance)
Так что это (почти) причудливая версия следующего
var Manager
var myFunction = function ($) {
$(function () {
Manager = new AjaxSolr.Manager({
solrUrl: 'http://example.solrstuff.org/solrjs/select'
});
Manager.init();
Manager.store.addByValue('q', '*:*');
Manager.doRequest();
});
};
myFunction(jQuery);
Но это оставляет бесполезную переменную myFunction
, которая относится к функции, которую вы в любом случае запускаете только один раз. И этот стиль также похож на то, как выглядят лучшие практики jQuery-плагина