Existuje způsob jak zjistit, že je komponenta přidaná až v ajaxovém volání?
- CZechBoY
- Člen | 3608
Zdravím,
lze vůbec nějak zjistit, že jsem komponentu přidal/vyrenderoval až
v ajaxovém volání (handleXXX($id))?
Tzn. komponenta se nepřidala v normálním requestu, ale až za jiných
proměnných z url + ajaxovém modu?
Řeším to kvůli dodatečnému načítání js, případně html mimo snippety (asi by bylo dobré udělat nějaký beforeBodyEndSnippet).
Pro příklad tabulka s detaily řádků po kliknutí:
class Table extends Control
{
protected function createComponentRow()
{
return new Multiplier(function ($id) {
return $this->rowFactory->create(this->rows[$id]);
});
}
}
class Row extends Control
{
public function handleDetails()
{
$this->template->selected = true;
}
protected function createComponentDetails()
{
return $this->detailsFactory->create($this->id);
}
}
Row.latte
<tr n:snippet="row">
</tr>
<tr>
{if $selected}
{control details}
{/if}
</tr>
Díky za rady/tipy :-)
Editoval CZechBoY (2. 6. 2016 16:18)
- Martk
- Člen | 661
Možností je hodně, ale principiálně jsou stejné, tady je ukázka prvního:
class Table extends Control
{
protected function createComponentRow()
{
return new Multiplier(function ($id) {
return $this->rowFactory->create(this->rows[$id]);
});
}
}
class Row extends Control
{
public function handleDetails()
{
$this->template->selected = true;
}
protected function createComponentDetails()
{
return $this->detailsFactory->create($this->id, $this->isAjax());
}
}
a v komponentě hodíš boolean hodnotu do data-* attributu v šabloně, kterou následně přečteš přes javascript.
- CZechBoY
- Člen | 3608
Dobře, ale co když budu mít komponentu už vypsanou i s detaily a potom
požádám o nějaký refresh dat?
tzn. přijdu na stránku abc-10-details
, vše se krásně
vykreslí; například submitnu ajax form a najednou si bude aplikace myslet,
že komponenta ještě nebyla vykreslena tak přidá (znovu) nový
javascript atd.