Překreslení celé tabulky s dynamickými snippety

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

Ahoj, mám problém s překreslením snippetu tabulky. Mám tabulku, kterou chci kliknutím na hlavičku sloupce seřadit a překreslit. V tabulce mám ale na každém řádku ještě dynamický snippet, který se překresluje po změně počtu kusů. Viz kód:

šablona:

{block content}
		{snippet assortmentContainer}
		<table n:if="count($assortmentAll)">
			<thead>
				<tr>
					<th><a class="ajax" n:href="changeSorting! $tableColumnsNames[0]['name']">#</a></th>
					<th><a class="ajax" n:href="changeSorting! $tableColumnsNames[3]['name']">Produkt</a></th>
					<th><a class="ajax" n:href="changeSorting! $tableColumnsNames[8]['name']">Kusů</a></th>
				</tr>
			</thead>
			<tbody>
				<tr n:foreach="$assortmentAll as $sortiment">
					<td>{$sortiment->ID}</td>
					<td>{$sortiment->name}</td>
					<td><div class="snippet" n:snippet="pieces-$sortiment->ID">{$sortiment->pieces}</div>
							<a n:href="changePieces! $sortiment->ID, 'plus'" class="ajax"></a>
							<a n:href="changePieces! $sortiment->ID, 'minus'" class="ajax"></a>
					</td>
				</tr>
			</tbody>
		</table>
		{/snippet}
{/block}

presenter:

	public function handleChangePieces($sortimentId, $operation)
	{
		... kód ...

		if($this->isAjax()){
			$this->template->assortmentAll = array($this->assortmentRepository->findById($sortimentId));
			$this->redrawControl('assortmentContainer');
		} else {
			$this->redirect('this');
		}
	}

	public function handleChangeSorting($by)
	{
		$this->template->assortmentAll = $this->assortmentRepository->findAll()->order($by);
		if($this->isAjax()) {
			$this->redrawControl('assortmentContainer');
		} else {
			$this->redirect('this');
		}
	}

	public function renderDefault()
	{
		...

		if(!isset($this->template->assortmentAll)) {
			$this->template->assortmentAll = $this->assortmentRepository->findAll();
		}

		...
	}

Problém mám takový, že metoda handleChangePieces() funguje správně, a patřičný snippet „pieces-…“ se překreslí. Ale metoda handleChangeSorting() nefunguje, respektive response je {"state":[],"snippets":{"snippet--pieces-5":"10","snippet--pieces-8":"36","snippet--pieces-9":"24","snippet--pieces-7":"2","snippet--pieces-6":"2","snippet--pieces-4":"2","snippet--pieces-2":"3"}}

Věděl by někdo prosím poradit jak to rozjet? jak upravit snippety? Díky moc

Mart78
Člen | 31
+
0
-

Přišel jsem na to sám, celé se to muselo obalit ještě do jednoho snippetu, viz. https://doc.nette.org/…ication/ajax#… .. i když nevím úplně proč, tak to funguje.

{block content}
        {snippet assortmentMainSnipp}
        <table n:if="count($assortmentAll)">
            <thead>
                <tr>
                    <th><a class="ajax" n:href="changeSorting! $tableColumnsNames[0]['name']">#</a></th>
                    <th><a class="ajax" n:href="changeSorting! $tableColumnsNames[3]['name']">Produkt</a></th>
                    <th><a class="ajax" n:href="changeSorting! $tableColumnsNames[8]['name']">Kusů</a></th>
                </tr>
            </thead>
            <tbody n:snippet="assortmentContainer">
                <tr n:foreach="$assortmentAll as $sortiment">
                    <td>{$sortiment->ID}</td>
                    <td>{$sortiment->name}</td>
                    <td><div class="snippet" n:snippet="pieces-$sortiment->ID">{$sortiment->pieces}</div>
                            <a n:href="changePieces! $sortiment->ID, 'plus'" class="ajax"></a>
                            <a n:href="changePieces! $sortiment->ID, 'minus'" class="ajax"></a>
                    </td>
                </tr>
            </tbody>
        </table>
        {/snippet}
{/block}

a v handleChangeSorting() překresluji snippet assortmentMainSnipp