Existuje způsob jak zjistit, že je komponenta přidaná až v ajaxovém volání?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
CZechBoY
Člen | 3608
+
0
-

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 | 656
+
0
-

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
+
0
-

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.

Martk
Člen | 656
+
0
-

Nebudeš invalidovat snippet kde je komponenta, ale jen formulář nebo jsem něco pochopil špatně?

Editoval Antik (2. 6. 2016 20:40)

CZechBoY
Člen | 3608
+
0
-

Asi jsem v příspěvku zapomněl zmínit, že by to byl třeba filtrovací formulář – takže by se potom musely překreslit data.