Nefunkční tooltip po redrawControl()

jedlicka
Člen | 70
+
0
-

Ahoj,

mám takový problém.

Mám tabulku nějakých zakázek. Po actionDefault (nebo $this->redirect('Contracts:default')) se tabulka normálně vykreslí a vše funguje, jak má (tooltipy, popovery apod.). Jakmile ale přepnu na jinou stránku (handlePagitation) nebo řádky filtruji podle textu apod., tak mi přestanou fungovat nějaké věci, např. právě tooltip. Kódy viz níže.

Nevíte někdo prosím, kde by mohl být problém?

Díky za každou radu.

Martin

default.latte:

<table>
	<thead>
		...
	</thead>
	<tbody n:snippet="contracts_tbody">

		{foreach $contracts as $c}
		...
		<tr>
			<!-- column state -->
			<td align="center" valign="middle" style="vertical-align:middle;">
				<!-- circle with tooltip -->
				<div class="circle_state_contracts">
					<a href="javascript:void(0);" rel="tooltip" data-placement="right" data-html="true" data-original-title="Nedefinováno">-</a>
				</div>
			</td>
			...
		</tr>
		...
		{/foreach}
	</tbody>
</table>
<div style="display: table; margin: 0 auto;">
	<ul class="pagination" n:snippet="contracts_pagitation">
		...
		{for $i = 1; $i <= $paginator->pageCount; $i++}
			<li {if $i==$paginator->page}class="active"{/if}><a id="ajax" href="{link Contracts:default,do=>pagination,page=>$i}">{$i}<span class="sr-only">(current)</span></a></li>
		{/for}
		...
	</ul>
</div>

ContractsPresenter:

<?php
public function handlePagination() {
	$page = $this->getParam('page');
	$uid = $this->uid;

	if ($page<1) {
		$page = 1;
	}

	$contracts = $this->database->table('contracts')->where(array('uid'=>$uid))->order('date DESC');
	$contracts = $this->getFilteredContracts($contracts);
	$count = $contracts->count('id');

	$paginator = new Nette\Utils\Paginator;

	$paginator->setItemCount($count);
	$paginator->setItemsPerPage(ContractsPresenter::PAGE_LENGHT);
	$paginator->setPage($page);

	$this->template->count = $count;
	$this->template->paginator = $paginator;

	$contracts = $contracts->limit($paginator->getLength(), $paginator->getOffset());

	$this->template->contracts=$contracts;
	$this->redrawControl('contracts_tbody');
	$this->redrawControl('contracts_pagitation');
}
?>
Ondřej Kubíček
Člen | 494
+
+1
-

nevím co je to za tooltip nebo jak je řešený, ale budeš ho muset asi znovu inicializovat, protože se změnil dom, tak na ty nové elementy, které ti vrátil snippet nejsou navěšené eventy pro tooltip

jedlicka
Člen | 70
+
0
-

Díky, a co znamená „budeš ho muset asi znovu inicializovat“? Jak?

Kcko
Člen | 468
+
0
-

jedlicka napsal(a):

Díky, a co znamená „budeš ho muset asi znovu inicializovat“? Jak?

Znovu vyvolat jeho instanci, oživit ho, přebindovat, prostě aby pracoval s nově přidanou strukturou.

Je to nějaký JS, kdyby to byl jquery plugin, tak $(‚prvek‘).nazevPluginu();
Podívej se do dokumentace nebo do svého kódu, nějak ten plugin musíš i v současné „spustit“

Editoval Kcko (29. 6. 2018 10:59)

jedlicka
Člen | 70
+
0
-

Díky moc. Už funguje. Stačilo přidat:

<script>
	$(document).ready(function() {
		$('[rel=tooltip]').tooltip();
	});
</script>

Martin

Ondřej Kubíček
Člen | 494
+
0
-

no a tos tam neměl? jak ti to mohlo při prvním načtení fungovat? :D

iguana007
Člen | 970
+
0
-

Ondřej Kubíček napsal(a):

no a tos tam neměl? jak ti to mohlo při prvním načtení fungovat? :D

Myslim, ze to tam pridal znovu do response te handle, aby se mu to znovu navesilo na ty DOM elementy.

Phalanx
Člen | 310
+
+4
-

Pokud používáš nette.ajax.js, tak si připiš do extension opětovné navázání tooltipu

<script>
    $(document).ready(function() {
		// standart
        $('[rel=tooltip]').tooltip();

		// ajax
		$.nette.ext('onCompleteAjax', {
			complete: function () {
				$('[rel=tooltip]').tooltip();
			}
		});
    });
</script>