如何在rich:suggestionBox javascript上覆盖markPrevious和markNext方法

时间:2010-09-23 09:47:59

标签: javascript richfaces override

我有一个要求,用户应该能够通过按键在富:suggestionBox的列表中从第一个项目导航到最后一个项目,反之亦然,按<。p>

我需要在richfaces 3.3.x上使用它。

完成这项工作的任务让我了解了富人建议框背后的javascript。您可以在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检查 Suggestion 对象,我可以看到方法确实被覆盖了。但是,我页面上的所有rich:suggestionBox仍然使用旧的实现。所以,我在想某种方式,富人背后的对象:在之前创建我覆盖原型。这就是我被困住的地方。我不知道如何在之前获得我的版本这些建议框中的任何一个都被创建。

有没有人知道如何解决这个问题?

谢谢,

金。

P.S。我意识到还可以直接在richfaces-ui.jar中调整代码,但我不想有自定义的jar。

2 个答案:

答案 0 :(得分:2)

有人在richfaces社区论坛上找到答案:http://community.jboss.org/message/563271

  

你应该重新定义   RichFaces.Suggestion.prototype的   这样的功能:

     

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

     

因为RichFaces.Suggetsion.prototype   扩展Suggestion.Base.prorotype的   重新定义之前的方法。

答案 1 :(得分:0)

也许你可以在那个rich:suggestionBox中放置一个a4j:support组件,它带有一个javascript onKeyUp事件处理程序,它调用类似于这个的javascript函数:

function KeyCheck(e) {

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