redrawControl při použití {control control:small}

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

Zdravím, narazil jsem na problém s překreslováním snippetů při použití jiného renderu.

V komponentě je fcn render() // detail.latte as renderEdit() // edit.latte
V edit.latte je snippet items. Pakliže pošlu handle na redraw snippetu items, tak se v responsu daný snippet nevrací a tudíž se nepřekreslí.

Pokud vložím snippet items do šablony detail.latte které se renderuje v rámci klasického renderu, tak se vrátí.

Tudíž je problém v tom že pokud použiji „sub“ render, tak se v jeho rámci nepřepisují snippety.

Otázka je, zda se jedná o bug, nebo jsem špatně pochopil logiku použití dalších renderů.

Díky moc za postřehy.

public function render() {
	$this->template->setFile(__DIR__ . '/templates/detail.latte');
	$this->template->render();
}

public function renderEdit() {
	$this->template->setFile(__DIR__ . '/templates/edit.latte');
	$this->template->data = []; //load data from model
	$this->template->render();
}
public function handle_addItem() {
	// do action in model
	if($this->presenter->isAjax()) {
		$this->presenter->redrawControl('flashes'); // flashes se vrátí
		$this->redrawControl('items'); // items se nevrátí
	}
}
//edit.latte
{snippet items}
	{if count($data)}
		{foreach $data as $item}
			{$item['name']}<br />
		{/foreach}
	{/if}
{/snippet}
<a n:href="_addItem!" class="ajax">přidat položku</a>
David Matějka
Moderator | 6445
+
+4
-

Ano, tohle je known limitation. Jednim z reseni muze byt obaleni {control foo:edit} do makra snippetArea a invalidovat jak snippetArea tak vnitrni items.

Ale ja spise doporucuju vubec nepouzivat jine render metody u komponent (stejne jako parametry pro render metody) a jit treba cestou subkomponent

iwory
Člen | 147
+
0
-

David Matějka napsal(a):

Ano, tohle je known limitation. Jednim z reseni muze byt obaleni {control foo:edit} do makra snippetArea a invalidovat jak snippetArea tak vnitrni items.

Ale ja spise doporucuju vubec nepouzivat jine render metody u komponent (stejne jako parametry pro render metody) a jit treba cestou subkomponent

Jasný, napíšu jinak. Díky za point :)

Michal Hlávka
Člen | 190
+
-7
-

Já bych ty redrawControly z Nette smazal úplně

Felix
Nette Core | 1189
+
0
-

@iwory Mozna ti pomuze tenhle addon: https://componette.org/…l-rendering/