p:用于切换原位输入的按钮

时间:2012-06-15 14:05:57

标签: primefaces

我正在尝试使用一个按钮来切换p:inplace项目。我正在尝试使用切换功能,但没有运气。

<p:inplace widgetVar="X" >
  <p:inputText  value="test"></p:inputText>
 </p:inplace>

<p:button value="toggle" onclick="X.toggle()" />

当我这样做时,我在浏览器的控制台中收到以下消息

Uncaught TypeError:无法调用undefined primefaces.js.jsf的方法'fadeOut':18 PrimeFaces.widget.Inplace.PrimeFaces.widget.BaseWidget.extend.toggle primefaces.js.jsf:18 的onclick

5 个答案:

答案 0 :(得分:1)

看起来默认效果存在错误。将效果更改为其他标准效果之一,看看是否能让你前进。

<p:inplace widgetVar="X" effect="clip">
  <p:inputText  value="test"></p:inputText>
</p:inplace>

用户手册中定义的可用效果:

• blind
• clip
• drop
• explode
• fold
• puff
• slide
• scale
• bounce
• highlight
• pulsate
• shake
• size
• transfer

答案 1 :(得分:0)

切换javascript函数看起来很奇怪。它只支持3个效果值。它还需要两个第一个参数 - 要显示的元素和要隐藏的元素。不知道如何使用它。

PrimeFaces.widget.Inplace.prototype.toggle = function(elToShow, elToHide, callback) {
    var _self = this;
    if(this.cfg.effect == 'fade') {
        elToHide.fadeOut(this.cfg.effectSpeed,
                function(){
            elToShow.fadeIn(_self.cfg.effectSpeed);

            if(callback)
                callback.call(_self);
        });
    }
    else if(this.cfg.effect == 'slide') {
        elToHide.slideUp(this.cfg.effectSpeed,
                function(){
            elToShow.slideDown(_self.cfg.effectSpeed);
        });
    }
    else if(this.cfg.effect == 'none') {
        elToHide.hide();
        elToShow.show();
    }
}

我可以推荐至少一种解决方法(非常hackish,因为它使用了tag生成的标记的内部ID,但对我有用(PrimeFaces 3.5):

<p:inplace event="none" id="xId">
    <h:inputText value="test"/>
</p:inplace>
<p:commandButton value="Toggle" 
    oncomplete="$('#xId_content,#xId_display').toggle()" />

答案 2 :(得分:0)

尝试使用它,对我有用:

    <p:commandLink onclick="PF('X').toggle()" title="Toggle"></p:commandLink>

它会为你切换你的widgetvar。

答案 3 :(得分:0)

PrimeFaces的最新版本(来自4及更高版本iirc)可以选择将type="button"添加到p:commandButton,然后它不会在服务器上调用任何内容,只是客户端javascript

答案 4 :(得分:-1)

非常简单:代替toggle(),您必须使用show(),而不是hide()<p:button value="toggle" onclick="X.show()" /> 函数,在您的情况下:

class MyGraphicRect2(QGraphicsItem):
    def __init__(self, x, y, width, height):
        super().__init__()
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.setPos(self.x, self.y)
        self.color = QColor('red')

        # self.setToolTip('Test')

        self.setAcceptDrops(True)
        self.setCursor(Qt.OpenHandCursor)
        self.setFlag(QGraphicsItem.ItemIsSelectable, True)
        self.setFlag(QGraphicsItem.ItemIsMovable, True)
        self.setFlag(QGraphicsItem.ItemIsFocusable, True)
        self.setAcceptHoverEvents(True)


        s = Shadow()
        b = Blur()
        c = ColorChange()
        self.setGraphicsEffect(s)
        # self.setGraphicsEffect(c)

        # self.setGraphicsEffect(b)

    def setColor(self, color):
        self.color = QColor(color)

    def boundingRect(self):
        return QRectF(self.x, self.y, self.width, self.height)

    def paint(self, painter, options, widget):
        painter.setPen(QPen(QColor('black')))
        painter.setBrush(self.color)
        painter.drawRect(self.x, self.y, self.width, self.height)


class MoveThread(QThread):
    def __init__(self,object,scene,view):
        super().__init__()
        self.object=object
        self.scene=scene
        self.view=view
    def run(self):
        for i in range(1,10):
            time.sleep(1)
            self.object.moveBy(30,0)
            print(self.object.pos().x())
            #self.object.update()
            self.view.updateSceneRect(QRectF(0,0,800,800))


         #for color in ['green','white','black','magenta','yellow']:
         #   time.sleep(1)
         #   self.object.setColor(color)
         #   self.object.update()


class MyGraphicScene(QMainWindow):
    def __init__(self):
        super().__init__()
        self.rect=QRectF(0,0,800,800)
        self.Scene=QGraphicsScene(self.rect)
        self.View=QGraphicsView()
        self.View.setCacheMode(QGraphicsView.CacheNone)
        self.sceneConfig()

    def sceneConfig(self):
                         self.Scene.setBackgroundBrush(QBrush(QColor('yellow'),Qt.SolidPattern)))

    item=MyGraphicItem(30,30,100,100)
    self.item1=MyGraphicRect2(100,100,100,100)
    self.Scene.addItem(item)
    self.Scene.addItem(self.item1)
    line=QGraphicsLineItem(80,38,84,38)
    self.Scene.addItem(line)
    self.View.setScene(self.Scene)

def displayUI(self):
    print('Is scene active', self.Scene.isActive())
    self.setCentralWidget(self.View)
    self.th=MoveThread(self.item1,self.Scene,self.View)
    self.th.start()
    self.resize(1000,1000)
    self.show()


app=QApplication(sys.argv)

m=MyGraphicScene()

sys.exit(app.exec_())