2009-12-15 107 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替换为其他框架。