【问题标题】:What does the PF function do in Primefaces?Primefaces 中的 PF 功能有什么作用?
【发布时间】:2014-07-03 23:13:00
【问题描述】:

在很多地方都可以找到函数PF 与 Primefaces 的用法。例如在这个answer

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

这个函数有什么作用?

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

【问题讨论】:

  • 哇,好问题,我为什么没想到……:O

标签: jsf-2 primefaces


【解决方案1】:

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 的开发人员工具能够破译的内容。

【讨论】:

    【解决方案2】:

    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。

    另见

    【讨论】:

    • 我不确定这是否会增加 Mark 所说的内容,但我会留给你决定。
    • Imo 确实如此。更好的参考,因此我的赞成票(使用浏览器开发工具解密一个开源项目;-))但你最好将源的引用更改为 github,因为它们最近移动了
    【解决方案3】:

    对于其他在升级到 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').method().

    显然,创建此功能是为了避免命名空间冲突/污染,但如果您想通过小步骤迁移到新版本并隔离新版本引入的不兼容性,它会很有用。

    【讨论】:

    • 太棒了!当我的项目时间紧迫时,这使我免于更新我的整个代码库!谢谢
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2020-09-11
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多