Invalidace snippetu v komponentě
- MikeLacroix
- Člen | 60
Zdravím, nedaří se mi zprovoznit překreslení snippetu v komponentě. Posílám nástin mého kódu (osekaný od nepodstatných věcí):
Presenter:
class SearchPresenter extends BasePresenter
{
/** @var IProducts @inject */
public $products;
...
protected function createComponentProducts()
{
return $this->products->create();
}
}
Component:
class Products extends Control
{
...
public function render()
{
$this->template->setFile('products.latte');
$this->template->render();
}
public function handleLoad()
{
$this->redrawControl('listing');
}
}
Šablona presenteru:
{control products}
Šablona komponenty (products.latte):
{snippet listing}
{rand()}
{/snippet}
<a class="ajax" n:href="load!">Další produkty</a>
Po kliknutí na odkaz „Další produkty“ se odešle ajaxový požadavek, ovšem snippet „listing“ se nepřekreslí. Nějaká rada, co dělám špatně?
- David Matějka
- Moderator | 6445
kdyz se kouknes do dev tools v prohlizeci na network, jak vypada response od serveru?
- MikeLacroix
- Člen | 60
Tak už jsem přišel na to, v čem je problém. V presenteru mi ajaxové volání odchytí tohle:
public function renderDefault()
{
...
if ($this->isAjax()) {
...
$this->sendResponse(new JsonResponse([...]));
}
}
…takže do komponenty se ten ajaxovy pozadavek uz nedostane. Takze moje otázka teď zní trochu jinak:
Jak elegantně v presenteru zjišťovat, o jaký ajaxový požadavek se jedná? Zatím to mám uděláno přes kontrolu ‚do‘ parametru. Takže tam mám něco jako:
if ($this->isAjax() && $this->params['do'] != 'komponenta-signal') { ... }