【发布时间】:2014-07-03 23:13:00
【问题描述】:
在很多地方都可以找到函数PF 与 Primefaces 的用法。例如在这个answer
从我目前看到的情况来看,这似乎是一个神奇的“让它工作得更好”的功能。但我不相信这种东西所以:
这个函数有什么作用?
我在哪里可以找到有关它的文档?
【问题讨论】:
-
哇,好问题,我为什么没想到……:O
标签: jsf-2 primefaces
在很多地方都可以找到函数PF 与 Primefaces 的用法。例如在这个answer
从我目前看到的情况来看,这似乎是一个神奇的“让它工作得更好”的功能。但我不相信这种东西所以:
这个函数有什么作用?
我在哪里可以找到有关它的文档?
【问题讨论】:
标签: jsf-2 primefaces
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 的开发人员工具能够破译的内容。
【讨论】:
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;
};
PF是PrimeFaces.widgets['someWidgetId']的快捷方式,它只是在全局范围内查找Javascript对象,因此也可以使用window['someWidgetId']检索Javascript对象。
PrimeFaces 的 Javascript API 没有在线官方文档,因此要了解您可以使用 Javascript 对象真正“做什么”,您需要深入了解 PrimeFaces。
【讨论】:
对于其他在升级到 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().
显然,创建此功能是为了避免命名空间冲突/污染,但如果您想通过小步骤迁移到新版本并隔离新版本引入的不兼容性,它会很有用。
【讨论】: