Всем доброго дня)
Подскажите, как работает pjax. Прочитал кучу статей, но кроме какой-то элементарной базы ничего не нашел. По простому это выглядит как - обернул что-то в виджет, вызвал действие контроллера, данные пришли в представление и если они затронуты виджетом pjax, то данные вставляются без перезагрузки страницы. Окей, но это элементарщина. Как быть с более сложными действиями?
У меня задача отобразить после изменения в базе данных (смена наследника роли пользователя) визуально эти изменения. То есть я вызываю действие контроллера которое никаким образом ничего не отправляет в представление, а только выполняет действия с базой данных - меняет связь для определенной строки.
На сколько я понимаю, чтобы pjax работал он должен просто получать какие-то данные, либо html разметку, либо строку. В моем случае данных клиенту никаких не отправляется, просто происходит изменение в бд. Как в таком случае быть?
И если кто может, объясните что вообще делают js методы от этого pjax, типа:
$(document).on('pjax:end', function () {
$.pjax.reload({container : '#tab2'});
})
UPD:
Вроде разобрался, но не до конца.
Есть у меня контроллер AuthItemController, в нем есть действие actionIndex в котором вызывается метод модели для получения дерева наследования ролей и разрешений, потом этот список в виде массива рендерится в представление index и там оборачивается в пиджак. Есть второй контроллер AuthItemChildController с действием actionChangeParent, которое вызывается ajax-ом при перетаскивании и бросании одного элемента списка на другой. Если ajax запрос прошел успешно и родительский элемент унаследовал дочерний, то в success ajax функции я вызываю
$.pjax.reload({container : '#pjaxTreeOfRoles', url : '/rbac?tab=tab2'});
Соответственно получается что при выполнении ajax запроса то есть при отрабатывании метода actionChangeParent, выполняется метод pjax.relod который должен отправить гет запрос на адрес /rbac?tab=tab2, получить ответ (ответом в данном случае служит то, что мы рендерим - дерево ролей) и подставить эти данные в указанный контейнер.
Что у меня происходит. Все происходит, как я описал выше, если посмотреть через фаербаг то в ответе на запрос приходит нужное мне дерево, оно действительно добавляется на страницу в нужный контейнер, но к нему не применяются ни стили, ни js подгруженный на основной странице. Как будто этот блок вставляется вне всего контента.