Я провел последние несколько часов, читая документы и код YUI, и я не могу заставить это работать.
Мой удаленный источник данных — XML. У меня есть локальный прокси для получения удаленных данных.
Я подтвердил через Firebug, что когда я печатаю в поле ввода, запросы отправляются и данные возвращаются. Однако div, который я настроил для хранения результатов, не записывается. При изучении DOM YUI заполняет мой div своей html-структурой, используемой для хранения результатов, но не содержимым.
Часто документируется, что функция «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>