Vícenásobné použití komponenty, když obsahuje snippet

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

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
+
0
-

Nepoužívej dynamické snippety, ale dynamické komponenty. Viz https://doc.nette.org/…n/multiplier

VojtaSim
Člen | 55
+
0
-

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
+
0
-

Multiplier ovlivňuje ID snippetů, protože toto ID obsahuje plný název komponenty.