Подтвердить что ты не робот

Что делает функция PF в Primefaces?

Во многих местах можно найти функцию PF с помощью Primefaces. Например, в этом ответе

Из того, что я видел до сих пор, кажется, что это волшебная функция "сделайте ее работу лучше". Но я не верю в такие вещи, поэтому:

Что делает эта функция?

И где я могу найти документацию об этом?

4b9b3361

Ответ 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').() Метод.

Очевидно, что вы были бы восприимчивы к конфликту/загрязнению пространства имен, эта функция была создана, чтобы избежать этого, но полезно, если вы хотите быстро перейти на новую версию и выделить какие-то несовместимости, введенные новой версией.