Vícenásobné použití komponenty, když obsahuje snippet
- VojtaSim
- Člen | 55
Zdravím,
pár dní už se trápím nad tím jak používat v presenteru vícekrát jednu
komponentu, která obsahuje snippet. Komponenta zobrazuje Bootstrap
dialog (je součástí latte komponenty) a obsahuje seznam souborů a
složek. Při kliknutí na složku se vyšle ajaxový request, načte se obsah
zvolené složky a invaliduje se snippet
$this->invalidateControl('mediaBrowser');
a BOOM… chyba, ty
snippety jsou tam 2 protože jsou i dvě ty „samé“ komponenty.
e.g:
protected function createComponentMediaBrowser()
{
// __construct($name, \Model\Media $media, $mode, $accept)
$browser = new \Media\Browser('MediaBrowser', $this->context->media, \Media\Browser::SINGLE, \Media\Browser::ALL);
$browser->setTranslator($this->translator);
return $browser;
}
protected function createComponentPostCoverPicker()
{
$picker = new \Media\Browser('PostCoverPicker', $this->context->media, \Media\Browser::SINGLE, \Media\Browser::IMAGES);
$picker->setTranslator($this->translator);
$picker->onSelect[] = function() {
// do something
};
return $picker;
}
zkoušel jsem i dynamické snippety, ovšem zde je zase ta věc se statickým snippetem v roli rodiče. Spokojil bych se i s jednou komponentou, ale u jedné potřebuji nastavit takový callback a jiné zas takový.
Předem díky za nápady a názory :-)
- norbe
- Backer | 405
Nepoužívej dynamické snippety, ale dynamické komponenty. Viz https://doc.nette.org/…n/multiplier
- VojtaSim
- Člen | 55
norbe napsal(a):
Nepoužívej dynamické snippety, ale dynamické komponenty. Viz https://doc.nette.org/…n/multiplier
Multiplier jsem zkoušel už předtím a i tak to vytvoří více komponent
a uvnitř bude ten stejný snippet, který na výsledné stránce vytvoří
vícekrát element se stejným ID. Takže po invalidaci JS neví kam ten payload
umístit. Pokud nějak použití Multiplieru ovlivňuje název snippetů tak
jsem si toho pravděpodobně nevšiml. Zkus napsat jak by jsi to zapsal
v latte, jestli ten snippet umístit do latte komponenty, nebo do latte
presenteru, kde ve {foreach}
vytváříš jednitlivé komponenty a
Multiplieru.
- Vojtěch Dobeš
- Gold Partner | 1316
Multiplier ovlivňuje ID snippetů, protože toto ID obsahuje plný název komponenty.