вопрос ajax solr - PullRequest
       6

вопрос ajax solr

1 голос
/ 15 декабря 2009

Я следовал учебнику по Ajax Solr, и на первом шаге я написал этот код.

header.php:

<script type="text/javascript" src="static/js/ajax-solr/core/Core.js"></script>
<script type="text/javascript" src="static/js/ajax-solr/core/AbstractManager.js"></script>
<script type="text/javascript" src="static/js/ajax-solr/managers/Manager.jquery.js"></script>
<script type="text/javascript" src="static/js/ajax-solr/core/Parameter.js"></script>
<script type="text/javascript" src="static/js/ajax-solr/core/ParameterStore.js"></script>
<script type="text/javascript" src="static/js/reuters.js"></script>

reuters.js:

var Manager;

(function ($) {
  $(function () {
    Manager = new AjaxSolr.Manager({
      solrUrl: 'http://localhost/solr/select'
    });
    Manager.init();
  });
})(jQuery);

// build query
Manager.store.addByValue('q', '*:*');

// do request
Manager.doRequest();

но когда я запускаю, firebug говорит Manager.store.addByValue ('q', ': '); не определено.

как получилось? Я правильно добавил все библиотеки.

Ответы [ 2 ]

7 голосов
/ 15 декабря 2009

Полагаю, ваш сценарий должен выглядеть примерно так.

В вашем случае последние операторы 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-плагина

0 голосов
/ 06 января 2010

Что касается синтаксиса (function($){ })(jQuery);, я использую этот синтаксис, чтобы можно было безопасно использовать переменную $ внутри функции. Использование другой инфраструктуры JS, вероятно, потребует большего количества модификаций, чем простая замена jQuery на otherFramework, в зависимости от того, как вы используете переменную $ в функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...