И снова pjax и js

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Sereja3578
Сообщения: 204
Зарегистрирован: 2016.09.21, 11:15
Контактная информация:

И снова pjax и js

Сообщение Sereja3578 »

Всем привет.

В проекте везде используется kartik grid с pjax. При фильтрации отправляет соответственно ajax запрос, грид обновляется, данные норм выводятся, но после этого перестает работать bootstrap tooltip повешенный на одну из кнопок в гриде. Скрипт активируется в web/js/site.js так:

Код: Выделить всё

$(function() {
    $("[data-toggle='tooltip-click']").tooltip({
        'trigger' : 'click'
    });
});
пробовал делать в контроллере так:

Код: Выделить всё

$searchModel = $this->getSearchModel();
        $dataProvider = $searchModel->search();

        if (Yii::$app->request->isAjax) {

            Yii::$app->response->format = Response::FORMAT_JSON;

            return $this->renderAjax('index', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
            ]);
        } else {

            return $this->render('index', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
            ]);

        }
Похоже site.js все равно не догружается.
WalpeR
Сообщения: 64
Зарегистрирован: 2016.08.29, 17:21

Re: И снова pjax и js

Сообщение WalpeR »

Нужно заного инициализировать tooltip, после каждого обновления Dom дерева.
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: И снова pjax и js

Сообщение dmg »

Попробуйте добавить глобально

Код: Выделить всё

$( document ).ajaxComplete(function() {
	$("[data-toggle='tooltip-click']").tooltip({
        	'trigger' : 'click'
	});
});
Аватара пользователя
Sereja3578
Сообщения: 204
Зарегистрирован: 2016.09.21, 11:15
Контактная информация:

Re: И снова pjax и js

Сообщение Sereja3578 »

WalpeR писал(а): 2017.06.26, 12:51 Нужно заного инициализировать tooltip, после каждого обновления Dom дерева.
Понимаю, что так, но как сделать не знаю. Пробовал делать типа хака тупого, при on focus опять инициализировать, но не помогло. Я думал так - выполняется ajax запрос, грид обновляется, но скрипты отваливаются. Поэтому решил через renderAjax делать, Но при этом все равно не заработало, потом попробовал на событие focus повесить повторную инициализацию, но тоже не помогло.
Аватара пользователя
Sereja3578
Сообщения: 204
Зарегистрирован: 2016.09.21, 11:15
Контактная информация:

Re: И снова pjax и js

Сообщение Sereja3578 »

dmg писал(а): 2017.06.26, 12:55 Попробуйте добавить глобально

Код: Выделить всё

$( document ).ajaxComplete(function() {
	$("[data-toggle='tooltip-click']").tooltip({
        	'trigger' : 'click'
	});
});
А вот это вот работает) Спасибо. Правда я не понимаю почему работает так, и не работало до этого. Есть возможность объяснить? Типа обработчик не слетает, так как висит на глобальном объекте, который не перезагружается pjax?
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: И снова pjax и js

Сообщение dmg »

обработчик навешивается на существующий объект, поэтому, после завершения работы ajax, заново цепляем обработчик.
WalpeR
Сообщения: 64
Зарегистрирован: 2016.08.29, 17:21

Re: И снова pjax и js

Сообщение WalpeR »

У меня просто нет компьютера под рукой. А так у pjax есть ивент(тригер, или как оно называется там) pjax:end

Код: Выделить всё

$('#id-pjax').on('pjax:end', function() {
  $("[data-toggle='tooltip-click']").tooltip({
        	'trigger' : 'click'
	});
})
Аватара пользователя
Sereja3578
Сообщения: 204
Зарегистрирован: 2016.09.21, 11:15
Контактная информация:

Re: И снова pjax и js

Сообщение Sereja3578 »

WalpeR писал(а): 2017.06.26, 13:28 У меня просто нет компьютера под рукой. А так у pjax есть ивент(тригер, или как оно называется там) pjax:end

Код: Выделить всё

$('#id-pjax').on('pjax:end', function() {
  $("[data-toggle='tooltip-click']").tooltip({
        	'trigger' : 'click'
	});
})
А там выше dmg написал хак хороший ajaxComplete. Так то оно работает.
Ответить