Как переопределить методы markPrevious и markNext для rich: предлагая JavaScript - PullRequest
1 голос
/ 23 сентября 2010

У меня есть требование, по которому пользователи должны иметь возможность переходить от первого к последнему элементу в списке rich: список предположений, нажав клавишу, и наоборот, нажав клавишу.

Мне нужно получить эторабота над richfaces 3.3.x

Стремление сделать это привело меня к javascript, который стоит за rich: SuggestionBox.Вы можете найти его в JBoss anon svn .Обсуждаются следующие методы: markPrevious () и markNext () .

Вот как они определены в Suggestion.Base.prototype :

markPrevious: function() {
    if (this.index > 0) this.index--;
    //else this.index = this.entryCount - 1;
},

markNext: function() {
    if (this.index < this.entryCount - 1) this.index++;
    //else this.index = 0;
},

Как видите, нужная мне функциональность есть, но по какой-то причине они разместили ее в комментарии.Поэтому я попытался переопределить методы, поместив следующий бит javascript в файл шаблона, который используется всеми моими страницами:

<script type="text/javascript">
    //<![CDATA[

    if(Suggestion) {
        function newMarkPrevious() {
            if (this.index > 0) this.index--;
            else this.index = this.entryCount - 1;
        }

        function newMarkNext() {
            if (this.index < this.entryCount - 1) this.index++;
            else this.index = 0;
        }

        Suggestion.Base.prototype.markPrevious = newMarkPrevious;
        Suggestion.Base.prototype.markNext = newMarkNext;
      }
    //]]>
    </script>

Теперь, если я проверяю объект Предложение с помощьюfirebug, я вижу, что методы действительно переопределяются.Тем не менее, все богатство: SuggestionBoxes на моих страницах по-прежнему использовать старую реализацию.Итак, я думаю, что каким-то образом объекты, стоящие за богатыми: SuggestionBoxes создаются за до Я перезаписываю прототип.И вот где я застрял.Я не знаю, как я мог получить свою версию там за 1025 * до создания любого из этих боксов с предложениями.

У кого-нибудь есть идеи, как решить эту проблему?

Спасибо,

Ким.

PS Я понимаю, что есть также возможность просто настроить код непосредственно в richfaces-ui.jar, но я не хочу, чтобы пользовательская сборкабаночка.

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

Ответ был найден кем-то на форуме сообщества richfaces: http://community.jboss.org/message/563271

Вам следует переопределить функции RichFaces.Suggestion.prototype, например:

if (RichFaces &&RichFaces.Suggestion) {RichFaces.Suggestion.prototype.markPrevious = newMarkPrevious;RichFaces.Suggestion.prototype.markNext = newMarkNext;}

Поскольку RichFaces.Suggetsion.prototype расширяет методы Suggestion.Base.prorotype перед повторным определением.

0 голосов
/ 23 сентября 2010

Может быть, вы можете поместить компонент a4j: support в этот rich: offertionBox с обработчиком событий onKeyUp javascript, который вызывает функцию javascript, подобную этой:

function KeyCheck(e) {

   var KeyID = (window.event) ? event.keyCode : e.keyCode;
   switch(KeyID) {
     case 1:
         markNext function
         break;
     case 2:
         markPrevious function
         break;
   }
}
...