Не могу заставить автозаполнение YUI работать - PullRequest
2 голосов
/ 26 мая 2009

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

Ответы [ 3 ]

0 голосов
/ 10 сентября 2009

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

0 голосов
/ 22 февраля 2011

вместо

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

Попробуйте

YAHOO.example.BasicRemote = function() {...}
0 голосов
/ 20 июня 2009

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

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

на это вместо:

autosearch.applyLocalFilter = false;

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

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

...