Показывать нижний колонтитул автозаполнения YUI только при наличии 5 результатов - PullRequest
0 голосов
/ 24 февраля 2011

Мне бы хотелось, чтобы автозаполнение отображало нижний колонтитул, который говорит Displaying top 5 results, только когда на самом деле отображаются 5 результатов.

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

Пожалуйста, извините за глупый flip трюк.

oAC.formatResult = function(oResultData, sQuery, sResultMatch) {
         var sKey = sResultMatch

         // Extract the part of the match that the user did not type
         var sKeyRemainder = sKey.substr(sQuery.length);


         oAC.setFooter("");
         var aMarkup = ["<div class='myCustomResult'>",
                             "<span style='font-weight:bold'>",
                             sQuery,
                             "</span>",
                             sKeyRemainder,
                             "<br>",
                             "</div>"];

         if (oResultData[2] >= 4) {
            flip = true;
         }
         if (flip) {
            oAC.setFooter("<div style=\"margin-left:5px;\"><span style=\"font-weight:bold;\">See more results for " + sQuery + "</span><br>Showing top 5 results</div>");
         }
         return (aMarkup.join(""));
      };

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

Вместо того, чтобы пытаться установить его в функции formatResult, я попытался использовать функцию doBeforeExpandContainer, и она работает как шарм.

oAC.formatResult = function(oResultData, sQuery, sResultMatch) {
   var sKey = sResultMatch

   // Extract the part of the match that the user did not type
   var sKeyRemainder = sKey.substr(sQuery.length);


   oAC.setFooter("");
   var aMarkup = ["<div class='myCustomResult'>",
                       "<span style='font-weight:bold'>",
                       sQuery,
                       "</span>",
                       sKeyRemainder,
                       "<br>",
                       "</div>"];

   oAC.setFooter("<div class=\"ac-footer\"><div class=\"ac-footer-content\"><a class=\"ac-footer-link\" href=\"#\" onclick=\"spandex(this,event,'filter-company');return false;\">See more results for <b>" + sQuery + "</b></a><br><span class=\"ac-footer-sub\">Showing top 5 results</span></div></div>");

   return (aMarkup.join(""));
};

oAC.doBeforeExpandContainer = function(sQuery, oResponse) {
   if (oAC._nDisplayedItems <= 5) {
      oAC.setFooter("");
   }

   return true;
}

doBeforeExpandContainer вызывается каждый раз, когда контейнероткрывается (как и следовало ожидать), и _nDisplayedItems - это количество элементов, которые будут отображаться в списке (также как вы ожидаете).

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

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

Вы хотите, чтобы нижний колонтитул появлялся только при наличии 5 результатов?

Тогда не следует ли изменить

if (oResultData[2] >= 4) {
    flip = true;
}

на

if (oResultData[2] == 4) {  // is this a zero based number? or should this be 5?
    flip = true;
}
else { flip = false } // assuming you don't already reset this in scope

?

...