2009-12-15 106 views
1

我遵循ajax solr教程,並在第一步中編寫了這段代碼。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

我想你的腳本應該看起來像這樣。

在你的情況下,最後的語句不在「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插件的最佳做法看起來像

+0

thx它的工作。什麼(功能($){})(jQuery);做?我剛纔看到$(document).ready(function(){}); – ajsie 2009-12-15 10:25:01

+0

檢查答案的第二部分 – jitter 2009-12-15 12:43:29

+0

thx爲答案! – ajsie 2009-12-15 13:52:32

0

關於(function($){ })(jQuery);語法,我使用這種語法,以便我可以安全地在函數內使用$變量。根據你在函數中如何使用$變量,使用不同的JS框架可能需要更多的修改,而不是簡單地將jQuery替換爲其他框架。