redrawControl při použití {control control:small}
- iwory
- Člen | 147
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
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
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 :)