2009-12-15 2 views
1

Я следил за учебником ajax solr, а на первом этапе я написал этот код.ajax solr question

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(); 

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

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

ответ

7

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

В вашем случае последние операторы выходят за пределы функции «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(){...});.

Внешняя: (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 Plugin выглядят как

+0

THX это сработало. что делает (function ($) {}) (jQuery); делать? Я только что видел $ (document) .ready (function() {}); – ajsie

+0

проверка вторая часть ответа – jitter

+0

THX для ответа! – ajsie

0

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