2009-05-26 75 views
2

我已经花了最近几个小时阅读YUI文档和代码,但无法使其工作。无法让YUI自动完成工作

我的远程数据源是XML。我有一个本地代理来检索远程数据。

我已经通过Firebug确认,当我在输入字段中输入时,请求正在发送并且数据正在返回。但是,我配置来保存结果的div没有被写入。在检查DOM时,YUI使用它的用于保存结果的html结构填充我的div,但没有内容。

它经常被记录为调用函数“formatResult”来过滤结果。但是,这永远不会发生。我通过在函数中使用alert()来测试它。

我不知道什么不是发生。以下是我的XML格式和我的代码。我通过YUI加载器加载数据源和自动完成依赖关系。

<div id="auto-search"> 
    <input type="text" id="auto-search-input" value=""/> 
    <div id="auto-search-results"></div> 
</div> 


YAHOO.example.auto = function() { 

    var searchDataSource = new YAHOO.util.XHRDataSource("http://localhost/insidersearchproxy.php"); 
    searchDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_XML; 
    searchDataSource.responseSchema = { 
     resultNode : "RelatedResult", 
     fields: [ "rid","rtype", "title", "thumbURL" ] 
    } 

    var autosearch = new YAHOO.widget.AutoComplete("auto-search-input","auto-search-results", searchDataSource); 
    autosearch.generateRequest = function(sQuery) { 
     return "?q="+sQuery; 
    }; 

    autosearch.resultsTypeList = false; // pass data as an object 

    autosearch.applyLocalFilter = true; // pass results thru filter 
    autosearch.formatResult = function(oResultData, sQuery, sResultMatch) { 
     var sMarkup = (sResultMatch) ? sResultMatch : ""; 
     return sMarkup; 
    }; 

    return { 
     searchDataSource: searchDataSource, 
     autosearch: autosearch 
    }; 
}(); 

<list> 
    <RelatedResult> 
    <rid>2014</rid> 
    <rtype>Celebrity</rtype> 
    <title>Adam Brody</title> 
    <thumbURL>http://cm1.theinsider.com/media/0/52/65/wenn1302741.50.jpg</thumbURL> 
    </RelatedResult> 

    <RelatedResult> 
    <rid>2776</rid> 
    <rtype>Celebrity</rtype> 
    <title>Adam Sandler</title> 
    <thumbURL>http://cm1.theinsider.com/media/0/49/95/wenn1198212.50.jpg</thumbURL> 
    </RelatedResult> 
    <RelatedResult> 

    <rid>3084</rid> 
    <rtype>Celebrity</rtype> 
    <title>Bryan Adams</title> 
    <thumbURL>http://cm1.theinsider.com/media/0/1/46/RoomSer4.50.jpg</thumbURL> 
    </RelatedResult> 
    <RelatedResult> 
    <rid>5747</rid> 

    <rtype>Celebrity</rtype> 
    <title>Amy Adams</title> 
    <thumbURL>http://cm1.theinsider.com/media/0/56/87/wenn5095565.50.jpg</thumbURL> 
    </RelatedResult> 
    <RelatedResult> 
    <rid>6572</rid> 
    <rtype>Celebrity</rtype> 

    <title>Adam Richard</title> 
    <thumbURL>http://cm1.theinsider.com/media/0/7/97/Adam_Richard_small.50.jpg</thumbURL> 
    </RelatedResult> 
    <RelatedResult> 
    <rid>9001</rid> 
    <rtype>Celebrity</rtype> 
    <title>Adam Goldberg</title> 

    <thumbURL>http://cm1.theinsider.com/media/0/80/15/91969967.50.jpg</thumbURL> 
    </RelatedResult> 
    <RelatedResult> 
    <rid>30897</rid> 
    <rtype>Celebrity</rtype> 
    <title>Adam Rothenberg</title> 
    <thumbURL>http://cm1.theinsider.com/media/0/99/86/ex_bio_adam.50.jpg</thumbURL> 

    </RelatedResult> 
    <RelatedResult> 
    <rid>58009</rid> 
    <rtype>Celebrity</rtype> 
    <title>Adam Lambert</title> 
    <thumbURL>http://cm1.theinsider.com/media/0/361/95/271363.50.jpg</thumbURL> 
    </RelatedResult> 

</list> 

回答

0

而不是

YAHOO.example.auto = function() {...} 

尝试

YAHOO.example.BasicRemote = function() {...} 
0

很难确切地知道没有看到您的完整实现,但您可以尝试关闭“applyLocalFilter”。使用你的代码

autosearch.applyLocalFilter = false; 

有关工作落实,见我的测试页:换句话说,此行更改:​​

autosearch.applyLocalFilter = true; // pass results thru filter 

这不是

http://chris.photobooks.com/tests/autocomplete/test20090620.html

0

你应该当然重载'filterResponse',而不是'formatResult'。后者只是一个回调,可以让你控制结果的显示方式。