在不进行更改的情况下覆盖RichFaces PopupPanel.doResizeOrMove方法会导致行为不一致

时间:2014-04-16 15:02:11

标签: javascript jsf richfaces

我正在覆盖RichFaces PopupPanel.doResizeOrMove方法,如下所示:

(function() {
  var richfacesUiPopupPanelDoResizeOrMove = RichFaces.ui.PopupPanel.prototype.doResizeOrMove;      
  RichFaces.ui.PopupPanel.prototype.doResizeOrMove = function(diff) {
      richfacesUiPopupPanelDoResizeOrMove.call(this, diff);
  };
})();

最终我想添加一些额外的功能,因此覆盖。但是使用上面的代码,我期待与原始方法相同的行为。

但是,当我开始移动时,PopupPanel会快速移出视口。这是一个已知的问题,javascript覆盖通过调用(我通过应用获得相同的行为)或一些RichFaces特定的问题?我做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

doResizeOrMove方法有一个返回值,在您的实现中会丢失。它应该是

return richfacesUiPopupPanelDoResizeOrMove.call(this, diff);

虽然重写原型可行,但您可能需要查看$.extend(),这就是我们用来构建组件的内容。

(function() {            
    var richfacesUiPopupPanelDoResizeOrMove = RichFaces.ui.PopupPanel.prototype.doResizeOrMove;      
    $.extend(RichFaces.ui.PopupPanel.prototype, (function(options) {
        return {
            doResizeOrMove: function(diff) {
                return richfacesUiPopupPanelDoResizeOrMove.call(this, diff);
            }
        };
     })());        
 })();