Не могу заставить автозаполнение YUI работать

Я провел последние несколько часов, читая документы и код 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>

person Geuis    schedule 26.05.2009    source источник


Ответы (3)


Вместо

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

Пытаться

YAHOO.example.BasicRemote = function() {...}
person Jimmy    schedule 22.02.2011

Трудно сказать наверняка, не видя полной реализации, но вы можете попробовать отключить «applyLocalFilter». Другими словами, измените эту строку:

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

вместо этого:

autosearch.applyLocalFilter = false;

Для рабочей реализации с использованием вашего кода см. мою тестовую страницу:

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

person Chris Nielsen    schedule 20.06.2009

Конечно, вы должны перегрузить 'filterResponse', а не 'formatResult'. Последний является просто обратным вызовом, который позволяет вам контролировать, как отображаются ваши результаты.

person myme    schedule 10.09.2009