Что делает функция PF в Primefaces?
Во многих местах можно найти функцию PF
с помощью 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
является частью API JavaScript PrimeFaces. Он ищет объект 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 в глобальной области видимости, поэтому объект Javascript также можно получить с помощью window['someWidgetId']
.
В API-интерфейсе PrimeFaces Javascript нет официальной документации в Интернете, поэтому, чтобы понять, что вы действительно можете "сделать" с объектом Javascript, вам нужно глубоко погрузиться в PrimeFaces.
См. также
Ответ 3
Для других пользователей Primefaces, приходящих сюда при обновлении до версии 4.0 и выше, можно обойти необходимость использовать 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 по умолчанию, например ПФ ( 'widgetVar').() Метод.
Очевидно, что вы были бы восприимчивы к конфликту/загрязнению пространства имен, эта функция была создана, чтобы избежать этого, но полезно, если вы хотите быстро перейти на новую версию и выделить какие-то несовместимости, введенные новой версией.