PF功能在Primefaces中有什么作用?

时间:2014-05-15 13:14:34

标签: jsf-2 primefaces

在许多地方,人们可以找到使用Primefaces的函数PF。例如,在此answer

从我到目前为止看到的似乎是一个神奇的“让它工作得更好”的功能。但我不相信这种东西:

这个功能有什么作用?

我在哪里可以找到有关它的文档?

3 个答案:

答案 0 :(得分:18)

PF是一个Javascript函数。

在Primefaces 4.0中,小部件的Javascript范围发生了变化。在4.0版之前,您可以使用widgetVar.show();打开一个对话框小部件。

在Primefaces 4.0及更高版本中,小部件存储在Javascript小部件数组中。当你调用PF('widgetVar')时,它正在寻找数组中的小部件并返回它。

PF=function(d){
    var c=b.widgets[d];
    if(!c){
        if(a.console&&console.log){
            console.log("Widget for var '"+d+"' not available!")
        }
        b.error("Widget for var '"+d+"' not available!")
    }
    return c
};

我在这方面找不到太多,这是我能够使用Chrome的开发者工具解密的。

答案 1 :(得分:14)

PF函数是PrimeFaces的JavaScript API的一部分。它查找Javascript对象,它是客户端JSF组件的主干。这是它的定义(source):

PF = function(widgetVar) {      
        var widgetInstance = PrimeFaces.widgets[widgetVar];

        if (!widgetInstance) {
            PrimeFaces.error("Widget for var '" + widgetVar + "' not available!");
        }

        return widgetInstance;
    };

PFPrimeFaces.widgets['someWidgetId']的快捷方式,它只查找全局范围内的Javascript对象,因此也可以使用window['someWidgetId']检索Javascript对象。

PrimeFaces的Javascript API在线没有官方文档,因此要了解使用Javascript对象可以“真正”做什么,您需要深入了解PrimeFaces。

另见

答案 2 :(得分:8)

对于升级到4.0及更高版本时来到这里的其他Primefaces用户,可以避免使用PF('yourWidgetVar').someFunction()并直接使用yourWidgetVar.someFunction(),就像在4.0版之前一样。您只需要在web.xml中进行以下配置:

<context-param>
    <param-name>primefaces.LEGACY_WIDGET_NAMESPACE</param-name>
    <param-value>true</param-value>
</context-param>

来自Primefaces用户指南:

  

启用窗口范围,以便可以使用访问窗口小部件   widgetVar.method()除了默认的PF命名空间方法之外   PF( 'widgetVar')。()的方法。

显然,你很容易受到命名空间冲突/污染这个功能的影响而无法避免,但是如果你想以很小的步骤迁移到新版本并隔离新版本引入的不兼容性,那么它很有用。