2009-12-15 3 views
1

나는 ajax solr 자습서를 따라 갔고 1 단계에서이 코드를 작성했습니다.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(); 

하지만 난 그것을 실행할 때 방화 광 Manager.store.addByValue 말한다 ('q는', ':'); 정의되지 않았습니다.

어째서? 모든 라이브러리를 올바르게 추가했습니다.

답변

7

여러분의 스크립트는 다음과 같이 보일 것입니다.

마지막 문장은 "준비"기능 밖에 있으므로 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 플러그인 모범 사례와 비슷합니다.

+0

그게 효과가있어. what (function ($) {}) (jQuery); 해야 할 것? 나는 방금 $ (document) .ready (function() {})을 보았다. – ajsie

+0

대답의 두 번째 부분을 확인하십시오. – jitter

+0

thx! – ajsie

0

(function($){ })(jQuery); 구문과 관련하여이 구문을 사용하여 함수 내에서 $ 변수를 안전하게 사용할 수 있습니다. 다른 JS 프레임 워크를 사용하면 function 내에서 $ 변수를 사용하는 방법에 따라 otherFramework 대신 jQuery를 단순히 대체하는 것보다 많은 수정이 필요할 것입니다.